10#include "arcane/IMesh.h"
11#include "arcane/IApplication.h"
12#include "arcane/IParallelMng.h"
13#include "arcane/IVariableMng.h"
14#include "arcane/ISubDomain.h"
15#include "arcane/utils/ITraceMng.h"
16#include "arcane/IVariableAccessor.h"
17#include "arcane/ServiceBuilder.h"
18#include "arcane/SharedVariable.h"
19#include "arcane/MeshVariable.h"
20#include "arcane/VariableRefArray.h"
21#include "arcane/VariableTypes.h"
22#include "arcane/utils/ScopedPtr.h"
23#include "arcane/AbstractService.h"
24#include "arcane/VariableCollection.h"
26#include "arcane/utils/IOnlineDebuggerService.h"
27#include "arcane/ITransferValuesParallelOperation.h"
29#include "arcane/IVariableAccessor.h"
30#include "arcane/datatype/ArrayVariant.h"
32#include <arcane/hyoda/Hyoda.h>
33#include <arcane/hyoda/HyodaArc.h>
34#include <arcane/hyoda/HyodaIceT.h>
35#include <arcane/hyoda/HyodaMix.h>
36#include <arcane/hyoda/IHyodaPlugin.h>
52inline static Real3 Perp(Real3 v){
53 return Real3(v.y,-v.x,0.0);
56static inline void glVertex(Real3 p){
60inline static Real3 iColor(
Int32 i){
61 if (i==0)
return Real3(1.0, 0.0, 0.0);
62 if (i==1)
return Real3(1.0, 1.0, 0.0);
63 if (i==2)
return Real3(0.0, 1.0, 1.0);
64 if (i==3)
return Real3(0.0, 0.0, 1.0);
65 return Real3(0.0, 0.0, 0.0);
68inline static int glBorders(Real3 p0, Real3 p1, Real3 p2, Real3 p3, Real3 rgb){
69 glColor3d(rgb.x, rgb.y, rgb.z);
70 glBegin(GL_LINE_LOOP);
79inline static int glTri(Real3 p0, Real3 p1, Real3 p2, Real3 rgb){
81 glColor3d(1.0,1.0,1.0);
84 glColor3d(rgb.x, rgb.y, rgb.z);
98inline static int glQuad(Real3 p0, Real3 p1, Real3 p2, Real3 p3, Real3 rgb){
100 glColor3d(1.0,1.0,1.0);
103 glColor3d(rgb.x, rgb.y, rgb.z);
119inline static int glQuadFull(Real3 p0, Real3 p1, Real3 p2, Real3 p3, Real3 rgb){
120 glColor3d(rgb.x, rgb.y, rgb.z);
140inline static int glPenta(Real3 p0, Real3 p1, Real3 p2, Real3 p3, Real3 p4, Real3 rgb){
142 glColor3d(1.0,1.0,1.0);
145 glColor3d(rgb.x, rgb.y, rgb.z);
165inline static int glHexa(Real3 p0, Real3 p1, Real3 p2, Real3 p3, Real3 p4, Real3 p5, Real3 rgb){
167 glColor3d(1.0,1.0,1.0);
170 glColor3d(rgb.x, rgb.y, rgb.z);
193inline static int glInterface(Real3 p0, Real3 p1){
194 glColor3d(1.0f, 1.0f, 1.0f);
209HyodaMix::HyodaMix(Hyoda *hd,
210 ISubDomain *subDomain,
211 ITraceMng *tm):TraceAccessor(tm),
215 m_sub_domain(subDomain),
216 m_default_mesh(subDomain->defaultMesh()),
217 m_interface_normal(VariableBuildInfo(m_default_mesh,
"InterfaceNormal")),
218 m_interface_distance(VariableBuildInfo(m_default_mesh,
"InterfaceDistance2ForEnv",
219 IVariable::PNoDump|IVariable::PNoRestore)),
220 coords(m_default_mesh->nodesCoordinates()),
221 m_i_origine(VariableBuildInfo(m_default_mesh,
"OriginOffset")),
222 m_x_codes(VariableBuildInfo(m_default_mesh,
"IntersectionCodes"))
225 ServiceBuilder<IHyodaPlugin> serviceBuilder(m_sub_domain);
226 m_hPlgMats = serviceBuilder.createInstance(
"HyodaMats", SB_AllowNull);
227 m_hPlgEnvs = serviceBuilder.createInstance(
"HyodaEnvs", SB_AllowNull);
229 debug() <<
"\33[7m[HyodaMix::HyodaMix] Hyoda materials plugin loaded\33[m";
230 m_hPlgMats->setHyodaMix(m_hyoda,
this);
232 debug() <<
"\33[7m[HyodaMix::HyodaMix] NULL Hyoda materials plugin\33[m";
235 debug() <<
"\33[7m[HyodaMix::HyodaMix] Hyoda environments plugin loaded\33[m";
236 m_hPlgEnvs->setHyodaMix(m_hyoda,
this);
238 debug() <<
"\33[7m[HyodaMix::HyodaMix] NULL Hyoda environments plugin\33[m";
254static inline int comparOrigins(
const void *one,
const void *two){
257 if (frst->dot == scnd->dot)
return 0;
258 if (frst->dot < scnd->dot)
return -1;
261void HyodaMix::setCellOrigin(Cell cell){
264 Real3 flush(0.,0.,0.);
268 for(
Int32 i=0,iMx=cell->nbNode();i<iMx;i+=1){
271 rtn[i].dot=math::scaMul(m_interface_normal[cell], coords[cell->node(i)]);
273 qsort(rtn,cell->nbNode(),
sizeof(
Real_Int32),comparOrigins);
275 m_i_origine[cell]=rtn[0].idx;
285int HyodaMix::xNrmDstSgmt2Point(Real3 p0, Real3 d0, Real3 p1, Real3 p2, Real3 &xPoint){
288 Real d0pd1=math::scaMul(d0,Perp(d1));
289 debug()<<
"\t\t[xNrmDstSgmt2Point] p0"<<p0<<
", d0"<<d0;
290 debug()<<
"\t\t[xNrmDstSgmt2Point] Segment "<<p1<<p2;
292 if (math::scaMul(delta,d0)==0.0){
293 debug()<<
"\t\t[xNrmDstSgmt2Point] The're the same";
295 debug()<<
"\t\t[xNrmDstSgmt2Point] The lines are nonintersecting and parallel";
299 Real inv_d0pd1=1.0/d0pd1;
301 Real t=math::scaMul(delta,Perp(d0))*inv_d0pd1;
305 if ((t>=0.0) && (t<=1.0)){
306 debug()<<
"\t\t[xNrmDstSgmt2Point] T Intersection here!";
310 debug()<<
"\t\t[xNrmDstSgmt2Point] No intersection here!";
320Int32 HyodaMix::xCellPoints(Cell c,
324 Int32 iOrg=m_i_origine[c];
326 Real3 d0=Perp(normale);
327 Real3 p0=distance*normale;
328 m_p[0]=coords[c->node(iOrg)];
329 m_p[1]=coords[c->node((iOrg+1)%4)];
330 m_p[2]=coords[c->node((iOrg+2)%4)];
331 m_p[3]=coords[c->node((iOrg+3)%4)];
332 if (order>2) fatal()<<
"[HyodaMix::xCellPoints] order>2";
333 if (xNrmDstSgmt2Point(p0,d0,m_p[1],m_p[0],m_x[4*order+iOrg])==1) xCode|=1;
334 if (xNrmDstSgmt2Point(p0,d0,m_p[2],m_p[1],m_x[4*order+((iOrg+1)%4)])==1) xCode|=2;
335 if (xNrmDstSgmt2Point(p0,d0,m_p[3],m_p[2],m_x[4*order+((iOrg+2)%4)])==1) xCode|=4;
336 if (xNrmDstSgmt2Point(p0,d0,m_p[0],m_p[3],m_x[4*order+((iOrg+3)%4)])==1) xCode|=8;
338 m_x_codes[c]|=xCode<<(order<<2);
346void HyodaMix::xCellDrawInterface(Cell c,
Int32 order){
347 Int32 iOrg=m_i_origine[c];
348 Int32 xCode=(m_x_codes[c]>>(order<<2))&0xFul;
350 if (order>2) fatal()<<
"xCellDrawInterface order>2";
352 if (xCode==0x0)
return;
353 if (xCode==0xF)
return;
354 if (xCode==0x3) {glInterface(m_x[4*order+iOrg], m_x[4*order+((iOrg+1)%4)]);
return;}
355 if (xCode==0x5) {glInterface(m_x[4*order+iOrg], m_x[4*order+((iOrg+2)%4)]);
return;}
356 if (xCode==0x6) {glInterface(m_x[4*order+((iOrg+1)%4)], m_x[4*order+((iOrg+2)%4)]);
return;}
357 if (xCode==0x9) {glInterface(m_x[4*order+iOrg], m_x[4*order+((iOrg+3)%4)]);
return;}
358 if (xCode==0xA) {glInterface(m_x[4*order+((iOrg+1)%4)], m_x[4*order+((iOrg+3)%4)]);
return;}
359 if (xCode==0xC) {glInterface(m_x[4*order+((iOrg+2)%4)], m_x[4*order+((iOrg+3)%4)]);
return;}
360 fatal()<<
"HyodaMix::xCellDrawInterface Unknown! (xCode="<<xCode<<
")";
368int HyodaMix::xCellBorders(Cell cell,
373 m_hyoda->meshIceT()->setColor(min,max,val,rgb);
375 glBorders(coords[cell->node(0)], coords[cell->node(1)],
376 coords[cell->node(2)], coords[cell->node(3)], rgb);
385int HyodaMix::xCellFill(Cell cell,
391 Int32 iOrg=m_i_origine[cell];
397 debug() <<
"\t\t[HyodaMix::xCellFill] #"<<cell.uniqueId()
398 <<
": nbMilieux=" << nbMilieux
399 <<
", order=" << order <<
", xCodes=" << xCodes;
401 if (val<min) warning()<<
"[HyodaMix::xCellFill] val<min " << val <<
" < " <<
min;
402 if (val>max) warning()<<
"[HyodaMix::xCellFill] val>max " << val <<
" > " <<
max;
405 m_hyoda->meshIceT()->setColor(min,max,val,rgb);
406 m_hyoda->meshIceT()->checkOglError();
417 x[0] = m_x[4*0+iOrg];
418 x[1] = m_x[4*0+((iOrg+1)%4)];
419 x[2] = m_x[4*0+((iOrg+2)%4)];
420 x[3] = m_x[4*0+((iOrg+3)%4)];
421 x[4] = m_x[4*1+iOrg];
422 x[5] = m_x[4*1+((iOrg+1)%4)];
423 x[6] = m_x[4*1+((iOrg+2)%4)];
424 x[7] = m_x[4*1+((iOrg+3)%4)];
425 x[8] = m_x[4*2+iOrg];
426 x[9] = m_x[4*2+((iOrg+1)%4)];
427 x[10]= m_x[4*2+((iOrg+2)%4)];
428 x[11]= m_x[4*2+((iOrg+3)%4)];
430 if (order>2) fatal()<<
"[HyodaMix::xCellFill] order>2";
433 if ((nbMilieux==1 && order==0)
434 || (nbMilieux==1 && xCodes[0]==0xF))
435 return glQuadFull(coords[cell->node(0)], coords[cell->node(1)],
436 coords[cell->node(2)], coords[cell->node(3)], rgb);
439 if (nbMilieux==2 && order==0)
return xCellFill_i2_o0(cell,p,x,xCodes,rgb);
440 if (nbMilieux==2 && order==1)
return xCellFill_i2_o1(cell,p,x,xCodes,rgb);
443 if (nbMilieux==3 && order==0)
return xCellFill_i3_o0(cell,p,x,xCodes,rgb);
444 if (nbMilieux==3 && order==1)
return xCellFill_i3_o1(cell,p,x,xCodes,rgb);
445 if (nbMilieux==3 && order==2)
return xCellFill_i3_o2(cell,p,x,xCodes,rgb);
447 fatal() <<
"[HyodaMix::xCellFill] Unknown"
448 <<
", nbMilieux=" << nbMilieux
449 <<
", order=" << order
450 <<
", with codes=" << xCodes;
461int HyodaMix::xCellFill_i2_o0(Cell c, Real3 p[4], Real3 x[12], Int32Array& xCodes, Real3 rgb){
462 Int32 xCode0=xCodes.at(0);
463 Int32 xCode1=xCodes.at(1);
465 debug() <<
"\33[7m[xCellFill_i2_o0] xCode0="<<xCode0 <<
", xCode1="<<xCode1<<
"\33[m";
468 if (xCode0==0x0 && xCode1==0x0)
469 warning() <<
"HyodaMix: #" << c.uniqueId()
470 <<
": Case of 2 empty medium!";
473 if (xCode0==0xF ||(xCode0==0x0 && xCode1==0x0))
474 return glQuadFull(coords[c->node(0)],
477 coords[c->node(3)], rgb);
480 if (xCode0==0x0)
return 0;
486 if (xCode0==0x3)
return glPenta(x[0],x[1],p[2],p[3],p[0],rgb);
487 if (xCode0==0x5)
return glQuad(x[0],x[2],p[3],p[0],rgb);
488 if (xCode0==0x6)
return glPenta(x[1],x[2],p[3],p[0],p[1],rgb);
489 if (xCode0==0x9)
return glTri(x[0],x[3],p[0],rgb);
490 if (xCode0==0xA)
return glQuad(x[1],x[3],p[0],p[1],rgb);
491 if (xCode0==0xC)
return glPenta(x[2],x[3],p[0],p[1],p[2],rgb);
492 warning()<<
"HyodaMix::xCellFill_i2_o0 #"<<c.uniqueId()
501int HyodaMix::xCellFill_i2_o1(Cell c, Real3 p[4], Real3 x[12], Int32Array& xCodes, Real3 rgb){
502 Int32 xCode0=xCodes.at(0);
503 Int32 xCode1=xCodes.at(1);
505 debug() <<
"\33[7m[xCellFill_i2_o1] xCode0="<<xCode0 <<
", xCode1="<<xCode1<<
"\33[m";
508 if (xCode0==0xF)
return 0;
511 if (xCode0==0x0 && xCode1!=0x0)
return glQuadFull(coords[c->node(0)],
514 coords[c->node(3)],rgb);
518 if (xCode0==0x3)
return glTri(x[1],x[0],p[1],rgb);
524 if (xCode0==0x5)
return glQuad(x[2],x[0],p[1],p[2],rgb);
528 if (xCode0==0x6)
return glTri(x[2],x[1],p[2],rgb);
537 if (xCode0==0x9)
return glPenta(x[3],x[0],p[1],p[2],p[3],rgb);
543 if (xCode0==0xA)
return glQuad(x[3],x[1],p[2],p[3],rgb);
547 if (xCode0==0xC)
return glPenta(x[2],x[3],p[0],p[1],p[2],rgb);
549 warning()<<
"HyodaMix::xCellFill_i2_o1 #"<<c.uniqueId()
558int HyodaMix::xCellFill_i3_o0(Cell c, Real3 p[4], Real3 x[12], Int32Array& xCodes, Real3 rgb){
559 Int32 x0=xCodes.at(0);
560 Int32 x1=xCodes.at(1);
561 Int32 x2=xCodes.at(2);
566 if (x0==0x0 && x1==0x0 && x2==0x0)
567 warning()<<
"xCellFill_i3_o0 #"<<c.uniqueId()
571 if (x0==0xF)
return glQuadFull(coords[c->node(0)],
574 coords[c->node(3)],rgb);
577 if (x0==0x0)
return 0;
580 if (x1==0x0 && x2==0x0)
return glQuadFull(coords[c->node(0)],
583 coords[c->node(3)],rgb);
586 if (x0==0x3)
return glPenta(x[0],x[1],p[2],p[3],p[0],rgb);
587 if (x0==0x5)
return glQuad(x[0],x[2],p[3],p[0],rgb);
588 if (x0==0x6)
return glPenta(x[1],x[2],p[3],p[0],p[1],rgb);
589 if (x0==0x9)
return glTri(x[0],x[3],p[0],rgb);
590 if (x0==0xA)
return glQuad(x[1],x[3],p[0],p[1],rgb);
591 if (x0==0xC)
return glPenta(x[2],x[3],p[0],p[1],p[2],rgb);
592 warning()<<
"HyodaMix::xCellFill_i3_o0 #"<<c.uniqueId()
601int HyodaMix::xCellFill_i3_o1(Cell c, Real3 p[4], Real3 x[12], Int32Array& xCodes, Real3 rgb){
602 Int32 x0=xCodes.at(0);
603 Int32 x1=xCodes.at(1);
604 Int32 x2=xCodes.at(2);
609 if (x0==0xF && x1==0xF && x2==0xF)
return 0;
612 if (x0==0x0 && x1==0x0)
return glQuadFull(coords[c->node(0)],
615 coords[c->node(3)],rgb);
617 if (x0==0x0 && x1==0x5)
return glQuad(x[4],x[6],p[3],p[0],rgb);
618 if (x0==0x0 && x1==0x6)
return glPenta(x[5],x[6],p[3],p[0],p[1],rgb);
619 if (x0==0x0 && x1==0xA)
return glQuad(x[5],x[7],p[0],p[1],rgb);
621 if (x0==0x3 && x1==0x3)
return glQuad(x[1],x[0],x[4],x[5],rgb);
622 if (x0==0x3 && x1==0xF)
return glTri(x[1],x[0],p[1],rgb);
624 if (x0==0x5 && x1==0x5)
return glQuad(x[4],x[6],x[2],x[0],rgb);
625 if (x0==0x5 && x1==0x3)
return glPenta(x[4],x[5],p[2],x[2],x[0],rgb);
626 if (x0==0x5 && x1==0x6)
return glPenta(x[5],x[6],x[2],x[0],p[1],rgb);
627 if (x0==0x5 && x1==0xF)
return glQuad(x[2],x[0],p[1],p[2],rgb);
629 if (x0==0x6 && x1==0x6)
return glQuad(x[5],x[6],x[2],x[1],rgb);
630 if (x0==0x6 && x1==0xF)
return glTri(x[2],x[1],p[2],rgb);
632 if (x0==0x9 && x1==0x3)
return glHexa(x[4],x[5],p[2],p[3],x[3],x[0],rgb);
633 if (x0==0x9 && x1==0x5)
return glPenta(x[4],x[6],p[3],x[3],x[0],rgb);
634 if (x0==0x9 && x1==0x6)
return glHexa(x[5],x[6],p[3],x[3],x[0],p[1],rgb);
635 if (x0==0x9 && x1==0x9)
return glQuad(x[4],x[7],x[3],x[0],rgb);
636 if (x0==0x9 && x1==0xA)
return glPenta(x[5],x[7],x[3],x[0],p[1],rgb);
637 if (x0==0x9 && x1==0xC)
return glHexa(x[6],x[7],x[3],x[0],p[1],p[2],rgb);
638 if (x0==0x9 && x1==0xF)
return glPenta(x[3],x[0],p[1],p[2],p[3],rgb);
640 if (x0==0xA && x1==0xA)
return glQuad(x[5],x[7],x[3],x[1],rgb);
641 if (x0==0xA && x1==0x6)
return glPenta(x[5],x[6],p[3],x[3],x[1],rgb);
642 if (x0==0xA && x1==0xC)
return glPenta(x[6],x[7],x[3],x[1],p[2],rgb);
643 if (x0==0xA && x1==0xF)
return glQuad(x[3],x[1],p[2],p[3],rgb);
645 if (x0==0xC && x1==0xC)
return glQuad(x[7],x[6],x[2],x[3],rgb);
646 if (x0==0xC && x1==0xF)
return glPenta(x[2],x[3],p[0],p[1],p[2],rgb);
648 warning() <<
"\33[7m[HyodaEnvs::xCellFill_i3_o1] #"<<c.uniqueId()
649 <<
": unhandled " << xCodes <<
"\33[m";
657int HyodaMix::xCellFill_i3_o2(Cell c, Real3 p[4], Real3 x[12], Int32Array& xCodes, Real3 rgb){
658 Int32 x0=xCodes.at(0);
659 Int32 x1=xCodes.at(1);
660 Int32 x2=xCodes.at(2);
665 if (x0==0xF || x1==0xF)
return 0;
668 if (x0==0x0 && x1==0x0 && x2!=0x0)
return glQuadFull(coords[c->node(0)],
671 coords[c->node(3)],rgb);
673 if (x0==0x0 && x1==0x5 && x2==0x6)
return glPenta(x[9],x[10],x[6],x[4],p[1],rgb);
674 if (x0==0x0 && x1==0x6 && x2==0x6)
return glQuad(x[9],x[10],x[6],x[5],rgb);
675 if (x0==0x0 && x1==0x6 && x2==0xF)
return glTri(x[6],x[5],p[2],rgb);
676 if (x0==0x0 && x1==0xA && x2==0xF)
return glQuad(x[7],x[5],p[2],p[3],rgb);
678 if (x0==0x5 && x1==0x5 && x2==0x5)
return glQuad(x[8],x[10],x[6],x[4],rgb);
679 if (x0==0x5 && x1==0x5 && x2==0x6)
return glPenta(x[9],x[10],x[6],x[4],p[1],rgb);
680 if (x0==0x5 && x1==0x5 && x2==0xF)
return glQuad(x[6],x[4],p[1],p[2],rgb);
681 if (x0==0x5 && x1==0x6 && x2==0x6)
return glQuad(x[9],x[10],x[6],x[5],rgb);
682 if (x0==0x5 && x1==0x6 && x2==0xF)
return glTri(x[6],x[5],p[2],rgb);
684 if (x0==0x6 && x1==0x6 && x2==0x6)
return glQuad(x[9],x[10],x[6],x[5],rgb);
685 if (x0==0x6 && x1==0x6 && x2==0xF)
return glTri(x[6],x[5],p[2],rgb);
687 if (x0==0x9 && x1==0x5 && x2==0x5)
return glQuad(x[8],x[10],x[6],x[4],rgb);
688 if (x0==0x9 && x1==0x5 && x2==0xF)
return glQuad(x[6],x[4],p[1],p[2],rgb);
689 if (x0==0x9 && x1==0x5 && x2==0x6)
return glPenta(x[9],x[10],x[6],x[4],p[1],rgb);
690 if (x0==0x9 && x1==0x6 && x2==0x6)
return glQuad(x[9],x[10],x[6],x[5],rgb);
691 if (x0==0x9 && x1==0x6 && x2==0xF)
return glTri(x[6],x[5],p[2],rgb);
692 if (x0==0x9 && x1==0x9 && x2==0x6)
return glHexa(x[9],x[10],p[3],x[7],x[4],p[1],rgb);
693 if (x0==0x9 && x1==0x9 && x2==0xF)
return glPenta(x[7],x[4],p[1],p[2],p[3],rgb);
694 if (x0==0x9 && x1==0xA && x2==0x6)
return glPenta(x[9],x[10],p[3],x[7],x[5],rgb);
695 if (x0==0x9 && x1==0xA && x2==0xF)
return glQuad(x[7],x[5],p[2],p[3],rgb);
697 if (x0==0xA && x1==0x6 && x2==0x6)
return glQuad(x[9],x[10],x[6],x[5],rgb);
698 if (x0==0xA && x1==0x6 && x2==0xF)
return glTri(x[6],x[5],p[2],rgb);
699 if (x0==0xA && x1==0xA && x2==0x6)
return glPenta(x[9],x[10],p[3],x[7],x[5],rgb);
700 if (x0==0xA && x1==0xA && x2==0xA)
return glQuad(x[9],x[11],x[7],x[5],rgb);
701 if (x0==0xA && x1==0xA && x2==0xF)
return glQuad(x[7],x[5],p[2],p[3],rgb);
702 if (x0==0xA && x1==0xC && x2==0xF)
return glPenta(x[6],x[7],p[0],p[1],p[2],rgb);
703 warning() <<
"\33[7m[HyodaEnvs::xCellFill_i3_o2] #"<< c.uniqueId()
704 <<
": unhandled " << xCodes <<
"\33[m";
714void HyodaMix::xLine2Cell(
int plugin, IVariable *variable,
Real min,
Real max){
717 fatal() <<
"\33[7m[HyodaEnvs::xLine2Cell] plugin==0\33[m";
721 if (m_hPlgEnvs!=NULL){
722 if (variable->itemKind()!=IK_Cell)
723 throw FatalErrorException(
"[HyodaMix::xLine2Cell] QHyoda 'env' plugin only support IK_Cell!");
724 m_hPlgEnvs->draw(variable,min,max);
726 debug()<<
"\t\33[7m[xLine2Cell] plugin==2 & Null m_hPlgEnvs!\33[m";
731 if (m_hPlgMats!=NULL)
732 m_hPlgMats->draw(variable,min,max);
734 debug()<<
"\t\33[7m[xLine2Cell] plugin==1 & Null m_hPlgMats!\33[m";
745xCellDrawNormal(Cell c, Real3 p[4],
Int32 iDst)
748 if (m_interface_normal[c].abs()==0.0)
752 glColor3d(1.0, 1.0, 1.0); glVertex(p[0]);
753 glColor3d(1.0, 0.0, 0.0); glVertex(p[1]);
754 glColor3d(0.0, 1.0, 0.0); glVertex(p[2]);
755 glColor3d(0.0, 0.0, 1.0); glVertex(p[3]);
758 glColor3d(1.0, 1.0, 1.0);
761 glVertex(p[0]+m_interface_normal[c]);
Fichier de configuration d'Arcane.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
T max(const T &a, const T &b, const T &c)
Retourne le maximum de trois éléments.
ARCCORE_HOST_DEVICE Real2 min(Real2 a, Real2 b)
Retourne le minimum de deux Real2.