// 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(p,p0/p), y(p,p0/p), z(p,p0/p) // triple f(pair l) { real v_plot=(N-lambda*log(l.x)+kappa*log(1/l.y)); return ( (l.x*l.y), (v_plot-1), (sqrt(M^2*l.x*l.y*(l.x-l.x*l.y))) ); } surface sbs=surface(f,(p_0,.01),(p_end,1),20,200,Spline); draw(sbs,orange+opacity(0.9),meshpen=orange,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);