// STATE BOUNDARY SURFACE (SBS) OF THE MODIFIED CAM CLAY MODEL // p'-q-e space // Project: Animating Soil Models https://soilmodels.com/soilanim // by: Gertraud Medicus, University of Innbruck, 09/2021 // // Software: asymptote.sourceforge.io // Asymptote Web Application: http://asymptote.ualberta.ca/ import graph3; size3(200,400,200,IgnoreAspect); // size currentprojection=orthographic(-500,1,400); // view scale(Linear(-1),Linear,Linear); // axes; -1: set p' axis reverse // fill in parameters real phi=25*pi/180; real M=6*sin(phi)/(3-sin(phi)); real N= 2; real lambda=0.06; real kappa=0.008; // define stress range p_0 to p_end to plot real p_0=25; real p_end=500; real e_min=N-lambda*log(p_end) -1; real e_max=N-lambda*log(p_0) -1; // The sbs is formulated as parametric surface by x(p0,p/p0), y(p0,p/p0), z(p0,p/p0) // triple f(pair l) { real p0=l.x; real p_p0=l.y; // p/p0 real v_plot=(N-lambda*log(p0)+kappa*log(1/p_p0)); return ( (p0*p_p0), (v_plot-1), (sqrt(M^2*p0*p_p0*(p0-p0*p_p0))) ); } surface sbs=surface(f,(p_0,.01),(p_end,1),20,200,Spline); draw(sbs,green+opacity(0.9),meshpen=green,render(merge=true)); // axes draw(Label("$p'$",1),(0,e_min,0)--(-p_end*1.1,e_min,0),black,Arrow3); draw(Label("$e$",1),(0,e_min,0)--(0,e_max*1.15,0),black,Arrow3); draw(Label("$q$",1),(0,e_min,0)--(0,e_min,p_end/2*1.1),black,Arrow3);