Why Simulizer?
Simulizer를 이용하면 코딩을 할 줄 모르는 사람도, 코딩을 할 줄 아는 사람도 누구나 빠르게 시뮬레이션을 만들고, 결과를 보면서 아이디어를 발전시킬 수 있습니다. 연구자들이 Simulizer로 무엇을 만들고 있는지, 실제 사례를 통해 확인할 수 있습니다.
Heat spreads out from the center.
100×100 격자 한가운데에 디랙 델타로 주어진 초기 온도가 시간에 따라 동심원으로 퍼집니다. 각 셀의 라플라시안 ∇²T를 이웃 네 방향의 온도 차이로 근사해 ∂T/∂t = α∇²T를 explicit FTCS로 적분, 매 스텝마다 show_mat으로 분포를 관찰합니다.
블록으로 라플라시안 연산자와 시간 적분 루프를 조립하기만 하면 됩니다. C·Python 연동도, 별도 플롯 코드도 전혀 필요하지 않습니다.
A wave pushes particles around.
1차원 격자에서 외부 전류원이 만든 전자기파가 중앙의 전자 입자들을 가속·진동시키는 과정을 추적하는 플라즈마 모델입니다. 맥스웰 방정식을 FDTD로 풀어 전기장 E와 자기장 B를 갱신하고, 선형 보간으로 장을 샘플링한 뒤 Boris pusher(반가속 → 회전 → 반가속)로 입자를 적분합니다.
Monaco + clangd LSP로 C++을 직접 작성하고, simstd.hpp의 show_graph() 한 줄로 매 스텝 결과를 브라우저 패널로 스트림합니다. matplotlib도, Python FFI도 필요하지 않습니다.
#include "simstd.hpp"
constexpr int N3 = 500, Nt = 1000, Np = 30;
constexpr double dt = 1e-16, dx = 4e-8;
constexpr double c = 3e8, mu = 1.257e-6;
constexpr double per = 2.5e-15;
int worker() {
std::vector<double> E1(N3), E2(N3), B1(N3), B2(N3), J1(N3);
std::vector<double> x3p(Np), v3p(Np);
for (int p = 0; p < Np; ++p)
x3p[p] = dx * (N3 / 2 + p);
auto trail = simstd::series<double>();
for (int i = 0; i < Nt; ++i) {
double t = dt * i;
J1[1] = 4.0 / (mu * c * dx)
* std::cos(2 * M_PI / per * t)
* std::exp(-std::pow((t - 6 * per) / per, 2));
// Faraday: ∂B/∂t = −∇×E
for (int k = 0; k < N3 - 1; ++k) {
B1[k] += (E2[k + 1] - E2[k]) * dt / dx;
B2[k] -= (E1[k + 1] - E1[k]) * dt / dx;
}
// Ampère: ∂E/∂t = c²(∇×B − μJ)
for (int k = 1; k < N3; ++k) {
E1[k] -= (B2[k] - B2[k - 1]) * c*c*dt/dx + J1[k]*mu*c*c*dt;
E2[k] += (B1[k] - B1[k - 1]) * c*c*dt/dx;
}
// Boris pusher (half-accel → rotate → half-accel)
push_particles(x3p, v3p, E1, B2, dt);
simstd::push(trail, E1);
}
simstd::show_graph(trail);
return 0;
}Drag. Snap.
Simulate.
코딩을 전혀 할 줄 모르는 사람도 직관적인 인터페이스로 시뮬레이션을 만들 수 있습니다. 함수 정의, 변수 선언, 산술 연산부터 텐서·벡터 연산, 경계 조건까지 시뮬레이션에 필요한 모든 기능이 블록으로 제공되고, 블록을 조립하는 것만으로 시뮬레이션이 완성됩니다.
Make a simulation with blocks.
Tensors and vectors, as blocks.
Draw the boundary, not the code.

Ship as Python or C++.
import numpy as np
from simstd import *
def main():
N3 = 500
Nt = 1000
Np = 30
dx3 = 4e-08
dt = 1e-16
VC = 299792458
q = 1.602e-19
m = 9.11e-31
MU = 1.257e-06
per = 2.5e-15
E1 = np.zeros(500); E2 = np.zeros(500); E3 = np.zeros(500)
B1 = np.zeros(500); B2 = np.zeros(500); B3 = np.zeros(500)
B1avg = np.zeros(500); B2avg = np.zeros(500)
J1 = np.zeros(500); J2 = np.zeros(500); J3 = np.zeros(500)
x1p = np.zeros(30); x2p = np.zeros(30); x3p = np.zeros(30)
v1p = np.zeros(30); v2p = np.zeros(30); v3p = np.zeros(30)
E1p = np.zeros(30); E2p = np.zeros(30); E3p = np.zeros(30)
B1p = np.zeros(30); B2p = np.zeros(30); B3p = np.zeros(30)
for i in range(Np):
x3p[i] = dx3 * (N3 // 2) + i * dx3
progress = debug_bar(0, Nt)
se1 = debug_series()
se2 = debug_series()
for i in range(Nt):
debug_bar_set(progress, i)
t = dt * i
J1[1] = 4 / (MU * VC * dx3) * (
np.cos(2 * 3.141592 / per * t)
* np.exp(-((t - 6*per) ** 2) / (per * per))
)
# FDTD: B half-step
for k in range(N3 - 1):
B1avg[k] = B1[k]; B2avg[k] = B2[k]
B1[k] += (E2[k+1] - E2[k]) * dt / dx3
B2[k] += -(E1[k+1] - E1[k]) * dt / dx3
B1avg[k] = (B1[k] + B1avg[k]) / 2
B2avg[k] = (B2[k] + B2avg[k]) / 2
# Boris pusher: half-accel → rotation → half-accel
Th = 0.5 * dt * q / m
for p in range(Np):
k = int(x3p[p] / dx3)
x3c = dx3 * k
E1p[p] = ((x3p[p] - x3c) * E1[k+1] + (x3c + dx3 - x3p[p]) * E1[k]) / dx3
E2p[p] = ((x3p[p] - x3c) * E2[k+1] + (x3c + dx3 - x3p[p]) * E2[k]) / dx3
V1 = v1p[p] + Th * E1p[p]
V2 = v2p[p] + Th * E2p[p]
V3 = v3p[p] + Th * E3p[p]
W1 = V1 / Th + V2*B3p[p] - V3*B2p[p]
W2 = V2 / Th + V3*B1p[p] - V1*B3p[p]
W3 = V3 / Th + V1*B2p[p] - V2*B1p[p]
BBGG = B1p[p]**2 + B2p[p]**2 + B3p[p]**2 + 1/(Th*Th)
W1 = W1 * 2 / BBGG; W2 = W2 * 2 / BBGG; W3 = W3 * 2 / BBGG
v1p[p] = V1 + W2*B3p[p] - W3*B2p[p] + Th * E1p[p]
v2p[p] = V2 + W3*B1p[p] - W1*B3p[p] + Th * E2p[p]
v3p[p] = V3 + W1*B2p[p] - W2*B1p[p] + Th * E3p[p]
x1p[p] += v1p[p] * dt
x2p[p] += v2p[p] * dt
x3p[p] += v3p[p] * dt
# E full-step
for k in range(1, N3):
E1[k] += -(B2[k] - B2[k-1]) * VC * VC * dt / dx3
E1[k] += -J1[k] * MU * VC * VC * dt
E2[k] += (B1[k] - B1[k-1]) * VC * VC * dt / dx3
if i > 63:
debug_set_holder(se1)
graph_arr_f64(E1)
debug_set_holder(se2)
graph_arr_range_f64(x1p, -1e-19, 1e-19)
Compile and run, right here.
C++. With one-line
visualization.
개발을 할 줄 아는 사람도 Monaco 에디터와 clangd LSP로 구성된 익숙한 개발 환경에서 작업할 수 있습니다. simstd.hpp 한 줄로 귀찮은 시각화 작업을 간단하게 넘기고, 빠르게 결과를 구현해 아이디어에 집중할 수 있는 환경을 제공합니다.
Full C++ editor, dark mode.
Three lines, three plots.
simstd.hpp 한 줄을 include하고 아래 세 함수 중 하나만 부르면 매 스텝의 결과가 브라우저 패널에 바로 그려집니다. matplotlib도, Python FFI도 필요하지 않습니다.Tensors and vectors, in C++.
#include "simstd.hpp"
void main() {
std::vector<i32> S = {100, 100};
Tensor<f64> Tf = Tensor<f64>({100, 100});
Tensor<f64> T = Tensor<f64>({100, 100});
// Dirac delta seed at the center
T(50, 50) = 50;
T(49, 50) = 50; T(51, 50) = 50;
T(50, 49) = 50; T(50, 51) = 50;
Tf(50, 50) = 50;
f64 dx = 0.01;
f64 alpha = 0.01;
i32 nt = 1000;
f64 dt = 0.002;
f64 lapl = 0;
i32 p = debug_bar(0, nt);
debug_set_holder(debug_series());
for (i32 k = 0; k < nt; k++) {
debug_bar_set(p, k);
// 5-point Laplacian, FTCS step
for (i32 i = 1; i < 98; i++) {
for (i32 j = 1; j < 98; j++) {
lapl = (T(i+1, j) + T(i-1, j) + T(i, j+1) + T(i, j-1)
- T(i, j) * 4) / (dx * dx);
Tf(i, j) = T(i, j) + lapl * (dt * alpha);
}
}
// Copy Tf -> T
for (i32 i = 0; i < 99; i++)
for (i32 j = 0; j < 99; j++)
T(i, j) = Tf(i, j);
show_mat(T); // ← streams a frame to the result panel
}
debug_set_holder(0);
debug_log(T);
}
Compile and run, right here.
Built-in,
not bolt-on.
워크스페이스 옆에 자연어 LLM, LaTeX OCR, SAM2 트래커, 백엔드 선택까지 한 자리에 있습니다. 따로 설치할 도구도, 별도의 비싼 라이선스도 필요 없습니다. 시뮬레이션을 만들면서 필요한 도구가 생기면, 그 자리에서 바로 사용하면 됩니다.
Describe it in Korean.
openai/gpt-oss-120b에 자연어로 묘사하면 응답이 SSE로 흘러나옵니다. 받은 Python을 py2block이 Blockly JSON으로 환원하고, 트리 diff가 새로 생긴·사라질 블록을 색깔로 미리 보여줍니다.
Type math, get blocks.

Paper screenshot → blocks.

Pull data out of any video.

WebGPU. WebGL. CPU.
Compile to desktop.
Send a link, not a zip.
Not MATLAB.
Not COMSOL.
MATLAB·COMSOL·LabVIEW는 강력하지만 라이선스 비용과 학습 난이도가 진입 장벽입니다. Simulizer는 라이선스 0원, 브라우저만 있으면 됩니다.
| MATLAB | COMSOL | LabVIEW | 직접 코딩 | Simulizer | |
|---|---|---|---|---|---|
| 비용 | 수백만원/년 | 수백~수천만원 | 유상 ($500–2,800/년) | 무료 | 무료 · 웹 |
| 학습 난이도 | 중~상 | 매우 높음 | 중~상 | 중 | 매우 낮음 |
| 코드 작성 | 필요 | 부분 필요 | 부분 필요 | 필요 | 선택 |
| 실행 환경 | 데스크톱 | 데스크톱 | 데스크톱 | 로컬 | 브라우저 |
| AI 보조 | △ Copilot 유상 | △ Chatbot (API키) | △ Nigel AI | ○ 외부 도구 | ○ 내장 |
| 시각화 | 별도 작업 | × | × | FFI 필요 | simstd.hpp 한 줄 |
| 영상 트래커 | △ CV Toolbox 유료 | × | △ Vision Module 유료 | 별도 라이브러리 | ○ SAM2 |
| LaTeX 지원 | × | × | × | × | ○ OCR 내장 |
Built with.
What changes.
라이선스 비용 없이, 학습 곡선 없이, 코드 작성 없이도 시뮬레이션을 만들 수 있습니다.
simstd.hpp 한 줄로 matplotlib·Python FFI 파이프라인을 대체합니다.
블록 작업물을 코드로 내보내 자기 환경·도구에서 계속 발전시킬 수 있습니다.
AI 보조·LaTeX OCR·영상 객체 추적까지 별도 설치나 라이선스 없이 단일 웹 환경에서 처리됩니다.
첫 세션부터 결과에 도달하므로 도구 학습이 아닌 가설 검증에 집중할 수 있습니다.