svMultiPhysics
Loading...
Searching...
No Matches
ComMod.h
1// SPDX-FileCopyrightText: Copyright (c) Stanford University, The Regents of the University of California, and others.
2// SPDX-License-Identifier: BSD-3-Clause
3
4// The classes defined here duplicate the data structures in the Fortran COMMOD module
5// defined in MOD.f.
6//
7// All of the data structures used for the mesh, boundarsy conditions and solver parameters, etc.
8// are defined here.
9
10#ifndef COMMOD_H
11#define COMMOD_H
12
13#include "Array.h"
14#include "Array3.h"
15#include "SolutionStates.h"
16#include "CepMod.h"
17#include "ChnlMod.h"
18#include "CmMod.h"
19#include "Parameters.h"
20#include "RobinBoundaryCondition.h"
21#include "CoupledBoundaryCondition.h"
22#include "Timer.h"
23#include "Vector.h"
24
25#include "DebugMsg.h"
26
27#include "consts.h"
28
29#include "fils_struct.hpp"
30
31#include "Parameters.h"
32
33#include "ArtificialNeuralNetMaterial.h"
34
35#include <array>
36#include <iostream>
37#include <memory>
38#include <string>
39#include <utility>
40#include <vector>
41#include <fstream>
42#include <sstream>
43
44class LinearAlgebra;
45
46/// @brief Fourier coefficients that are used to specify unsteady BCs
47//
48class fcType
49{
50 public:
51
52 bool defined() { return n != 0; };
53
54 // If this is a ramp function
55 bool lrmp = false;
56
57 // Number of Fourier coefficient
58 int n = 0;
59
60 // No. of dimensions (scalar or vector)
61 int d = 0;
62
63 // Initial value
65
66 // Time derivative of linear part
68
69 // Period
70 double T = 0.0;
71
72 // Initial time
73 double ti = 0.0;
74
75 // Imaginary part of coefficint
76 Array<double> i;
77
78 // Real part of coefficint
79 Array<double> r;
80};
81
82/// @brief Moving boundary data structure (used for general BC)
83//
84class MBType
85{
86 public:
87
88 bool defined() { return dof != 0; };
89
90 // Degrees of freedom of d(:,.,.)
91 int dof = 0;
92
93 // Number of time points to be read
94 int nTP = 0;
95
96 // The period of data
97 double period = 0.0;
98
99 // Time points
101
102 // Displacements at each direction, location, and time point
104};
105
107{
108 public:
109
110 // Proximal resistance
111 double Rp = 0.0;
112
113 // Capacitance
114 double C = 0.0;
115
116 // Distance resistance
117 double Rd = 0.0;
118
119 // Distal pressure
120 double Pd = 0.0;
121
122 // Initial value
123 double Xo = 0.0;
124};
125
126/// @brief Boundary condition data type
127//
129{
130 public:
131 // Strong/Weak application of Dirichlet BC
132 bool weakDir = false;
133
134 // Whether load vector changes with deformation
135 // (Neu - struct/ustruct only)
136 bool flwP = false;
137
138 // Strong/Weak application of Dirichlet BC
139 int clsFlgRis = 0;
140
141 // Pre/Res/Flat/Para... boundary types
142 //
143 // This stores differnt BCs as bitwise values.
144 //
145 int bType = 0;
146
147 // Pointer to coupledBC%face
148 int cplBCptr = -1;
149
150 // The face index that corresponds to this BC
151 int iFa = -1;
152
153 // The mesh index that corresponds to this BC
154 int iM = -1;
155
156 // Pointer to FSILS%bc
157 int lsPtr = -1;
158
159 // Undeforming Neu BC master-slave node parameters.
160 int masN = 0;
161
162 // Defined steady value
163 double g = 0.0;
164
165 // Neu: defined resistance
166 double r = 0.0;
167
168 // Robin: VTP file path for per-node stiffness and damping
169 std::string robin_vtp_file = "";
170
171 // RIS0D: resistance
172 double resistance = 0.0;
173
174 // Penalty parameters for weakly applied Dir BC
175 Vector<double> tauB{0.0, 0.0};
176 //double tauB[2];
177
178 // Direction vector for imposing the BC
179 Vector<int> eDrn;
180
181 // Defined steady vector (traction)
183
184 // Spatial dependant BC (profile data)
186
187 // General BC (unsteady and UD combination)
188 //
189 // This is declare ALLOCATABLE in MOD.f.
190 //
191 MBType gm;
192
193 // Time dependant BC (Unsteady imposed value);
194 //
195 // This is declare ALLOCATABLE in MOD.f.
196 //
197 fcType gt;
198
199 // Neu: RCR
200 rcrType RCR;
201
202 // Robin BC class
203 RobinBoundaryCondition robin_bc;
204
205 // Coupled BC class
206 CoupledBoundaryCondition coupled_bc;
207};
208
209/// @brief Class storing data for B-Splines.
210//
211class bsType
212{
213 public:
214
215 // Number of knots (p + nNo + 1)
216 int n = 0;
217
218 // Number of Gauss points for integration
219 int nG = 0;
220
221 // Number of knot spans (element)
222 int nEl = 0;
223
224 // Number of control points (nodes)
225 int nNo = 0;
226
227 // Number of sample points in each element (for output)
228 int nSl = 0;
229
230 // The order
231 int p = 0;
232
233 // Knot vector.
235};
236
237/// @brief Function spaces (basis) type.
238//
239class fsType {
240
241 public:
242
243 fsType();
244
245 void destroy();
246
247 // Whether the basis function is linear
248 bool lShpF = false;
249
250 // Element type
251 consts::ElementType eType = consts::ElementType::NA;
252
253 // Number of basis functions, typically equals msh%eNoN
254 int eNoN = 0;
255
256 // Number of Gauss points for integration
257 int nG = 0;
258
259 // Gauss weights
261
262 // Gauss integration points in parametric space
263 Array<double> xi;
264
265 // Bounds on Gauss integration points in parametric space
266 Array<double> xib;
267
268 // Parent shape function
269 Array<double> N;
270
271 // Bounds on shape functions
272 Array<double> Nb;
273
274 // Parent shape functions gradient
276
277 // Second derivatives of shape functions - used for shells & IGA
278 Array3<double> Nxx;
279};
280
281//--------
282// bfType
283//--------
284// Body force data structure type
285//
287{
288 public:
289
290 std::string file_name;
291 std::string mesh_name;
292
293 // Type of body force applied
294 int bType = 0;
295
296 // No. of dimensions (1 or nsd)
297 int dof = 0;
298
299 // Mesh index corresponding to this body force
300 int iM = -1;
301
302 // Steady value
304
305 // Steady but spatially dependant
306 Array<double> bx;
307
308 // Time dependant (unsteady imposed value)
309 fcType bt;
310
311 // General (unsteady and spatially dependent combination)
312 MBType bm;
313};
314
315// Fiber stress type
317{
318 public:
319
320 // Type of fiber stress
321 int fType = 0;
322
323 // Constant steady value
324 double g = 0.0;
325
326 // Directional stress distribution parameters
327 // Fraction of active stress in fiber direction (default: 1.0)
328 double eta_f = 1.0;
329
330 // Fraction of active stress in sheet direction (default: 0.0)
331 double eta_s = 0.0;
332
333 // Fraction of active stress in sheet-normal direction (default: 0.0)
334 double eta_n = 0.0;
335
336 // Unsteady time-dependent values
337 fcType gt;
338};
339
340/// @brief Structural domain type
341//
343{
344 public:
345 // Type of constitutive model (volumetric) for struct/FSI
346 consts::ConstitutiveModelType volType = consts::ConstitutiveModelType::stIso_NA;
347
348 // Penalty parameter
349 double Kpen = 0.0;
350
351 // Type of constitutive model (isochoric) for struct/FSI
352 consts::ConstitutiveModelType isoType = consts::ConstitutiveModelType::stIso_NA;
353
354 // Parameters specific to the constitutive model (isochoric)
355 // NeoHookean model (C10 = mu/2)
356 double C10 = 0.0;
357
358 // Mooney-Rivlin model (C10, C01)
359 double C01 = 0.0;
360
361 // Holzapfel model(a, b, aff, bff, ass, bss, afs, bfs, kap)
362 double a = 0.0;
363 double b = 0.0;
364 double aff = 0.0;
365 double bff = 0.0;
366 double ass = 0.0;
367 double bss = 0.0;
368 double afs = 0.0;
369 double bfs = 0.0;
370
371 // Collagen fiber dispersion parameter (Holzapfel model)
372 double kap = 0.0;
373
374 // Heaviside function parameter (Holzapfel-Ogden model)
375 double khs = 100.0;
376
377 // Lee-Sacks model
378 double a0 = 0.0;
379 double b1 = 0.0;
380 double b2 = 0.0;
381 double mu0 = 0.0;
382
383 // Fiber reinforcement stress
384 fibStrsType Tf;
385
386 // CANN Model/UAnisoHyper_inv
388
389 stModelType();
390};
391
392
393/// @brief Fluid viscosity model type
394//
396{
397 public:
398
399 // Type of constitutive model for fluid viscosity
400 consts::FluidViscosityModelType viscType = consts::FluidViscosityModelType::viscType_NA;
401
402 // Limiting zero shear-rate viscosity value
403 double mu_o = 0.0;
404
405 // Limiting high shear-rate viscosity (asymptotic) value (at infinity)
406 double mu_i = 0.0;
407
408 // Strain-rate tensor multiplier
409 double lam = 0.0;
410
411 // Strain-rate tensor exponent
412 double a = 0.0;
413
414 // Power-law exponent
415 double n = 0.0;
416};
417
418/// @brief Fluid viscosity model type
419//
421{
422 public:
423
424 // Type of constitutive model for fluid viscosity
425 consts::SolidViscosityModelType viscType = consts::SolidViscosityModelType::viscType_NA;
426
427 // Viscosity value
428 double mu = 0.0;
429};
430
431/// @brief Domain type is to keep track with element belong to which domain
432/// and also different physical quantities
433//
435{
436 public:
437 dmnType();
438 ~dmnType();
439
440 // The domain ID. Default includes entire domain
441 int Id = -1;
442
443 // Which physics must be solved in this domain
444 consts::EquationType phys = consts::EquationType::phys_NA;
445
446 // The volume of this domain
447 double v = 0.0;
448
449 // General physical properties such as density, elastic modulus...
450 // FIX davep double prop[maxNProp] ;
451 std::map<consts::PhysicalProperyType,double> prop;
452 //double prop[consts::maxNProp];
453
454 // Electrophysiology model
455 cepModelType cep;
456
457 // Structure material model
458 stModelType stM;
459
460 // Viscosity model for fluids
461 fluidViscModelType fluid_visc;
462
463 // Viscosity model for solids
464 solidViscModelType solid_visc;
465};
466
467/// @brief Mesh adjacency (neighboring element for each element)
468//
470{
471 public:
472 void destroy();
473
474 // No of non-zeros
475 int nnz = 0;
476
477 // Column pointer
478 Vector<int> pcol;
479
480 // Row pointer
481 Vector<int> prow;
482
483};
484
485/// @brief Tracer type used for immersed boundaries. Identifies traces of
486/// nodes and integration points on background mesh elements
487//
489{
490 public:
491 // No. of non-zero nodal traces
492 int n = 0;
493
494 // No. of non-zero integration point traces
495 int nG = 0;
496
497 // Local to global nodes maping nNo --> tnNo
498 Vector<int> gN;
499
500 // Self pointer of each trace to the IB integration point and
501 // element ID
502 Array<int> gE;
503
504 // Nodal trace pointer array stores two values for each trace.
505 // (1) background mesh element to which the trace points to,
506 // (2) mesh ID
507 Array<int> nptr;
508
509 // Integration point tracer array stores two values for each trace
510 // (1) background mesh element to which the trace points to,
511 // (2) mesh ID
512 Array<int> gptr;
513
514 // Parametric coordinate for each nodal trace
515 Array<double> xi;
516
517 // Parametric coordinate for each Gauss point trace
518 Array<double> xiG;
519};
520
521/// @brief The face type containing mesh at boundary
522//
524{
525 public:
526 faceType();
527 ~faceType();
528
529 void destroy();
530
531 //faceType& operator=(const faceType& rhs);
532
533 // Parametric direction normal to this face (NURBS)
534 int d = 0;
535
536 // Number of nodes (control points) in a single element
537 int eNoN = 0;
538
539 // Element type
540 consts::ElementType eType = consts::ElementType::NA;
541
542 // The mesh index that this face belongs to
543 int iM = 0;
544
545 // Number of elements
546 int nEl = 0;
547
548 // Global number of elements
549 int gnEl = 0;
550
551 // Number of function spaces
552 int nFs = 0;
553
554 // Number of Gauss points for integration
555 int nG = 0;
556
557 // Number of nodes
558 int nNo = 0;
559
560 // Global element Ids
561 Vector<int> gE;
562
563 // Global node Ids
564 Vector<int> gN;
565
566 // Global to local maping tnNo --> nNo
567 Vector<int> lN;
568
569 // Connectivity array
570 Array<int> IEN;
571
572 // EBC array (gE + gIEN)
573 Array<int> gebc;
574
575 // Surface area
576 double area = 0.0;
577
578 // Gauss point weights
580
581 // Position coordinates
582 Array<double> x;
583
584 // Gauss points in parametric space
585 Array<double> xi;
586
587 // Shape functions at Gauss points
588 Array<double> N;
589
590 // Normal vector to each nodal point
591 Array<double> nV;
592
593 // Shape functions derivative at Gauss points
594 // double Nx(:,:,:);
596
597 // Second derivatives of shape functions - for shells & IGA
598 // double Nxx(:,:,:);
599 Array3<double> Nxx;
600
601 // Face name for flux files
602 std::string name;
603
604 // Face nodal adjacency
605 adjType nAdj;
606
607 // Face element adjacency
608 adjType eAdj;
609
610 // Function spaces (basis)
611 std::vector<fsType> fs;
612
613 // TRI3 quadrature modifier
614 double qmTRI3 = 2.0/3.0;
615};
616
617/// @brief Store options for output types.
618//
620 bool boundary_integral = false;
621 bool spatial = false;
622 bool volume_integral = false;
623
624 bool no_options_set() {
625 return !(boundary_integral | spatial | volume_integral);
626 }
627
628 void set_option(consts::OutputType type, bool value)
629 {
630 if (type == consts::OutputType::boundary_integral) {
631 boundary_integral = value;
632 } else if (type == consts::OutputType::spatial) {
633 spatial = value;
634 } else if (type == consts::OutputType::volume_integral) {
635 volume_integral = value;
636 }
637 }
638};
639
640/// @brief Declared type for outputed variables
641//
643{
644 public:
645
646 // Options to write various output types.
647 OutputOptions options;
648
649 // The group that this belong to (one of outType_*)
650 consts::OutputNameType grp = consts::OutputNameType::outGrp_NA;
651
652 // Length of the outputed variable
653 int l = 0;
654
655 // Offset from the first index
656 int o = 0;
657
658 // The name to be used for the output and also in input file
659 std::string name;
660};
661
662/// @brief Linear system of equations solver type
663//
665{
666 public:
667
668 /// @brief LS solver (IN)
669 consts::SolverType LS_type = consts::SolverType::lSolver_NA;
670
671 /// @brief Successful solving (OUT)
672 bool suc = false;
673
674 /// @brief Maximum iterations (IN)
675 int mItr = 1000;
676
677 /// @brief Space dimension (IN)
678 int sD = 0;
679
680 /// @brief Number of iteration (OUT)
681 int itr = 0;
682
683 /// @brief Number of Ax multiple (OUT)
684 int cM = 0;
685
686 /// @brief Number of |x| norms (OUT)
687 int cN = 0;
688
689 /// @brief Number of <x.y> dot products (OUT)
690 int cD = 0;
691
692 /// @brief Only for data alignment (-)
693 int reserve = 0;
694
695 /// @brief Absolute tolerance (IN)
696 double absTol = 1e-08;
697
698 /// @brief Relative tolerance (IN)
699 double relTol = 0.0;
700
701 /// @brief Initial norm of residual (OUT)
702 double iNorm = 0.0;
703
704 /// @brief Final norm of residual (OUT)
705 double fNorm = 0.0;
706
707 /// @brief Res. rduction in last itr. (OUT)
708 double dB = 0.0;
709
710 /// @brief Calling duration (OUT)
711 double callD = 0.0;
712
713 //@brief Configuration file for linear solvers (Trilinos, PETSc)
714 std::string config;
715};
716
717
718/// @brief Contact model type
719//
721{
722 public:
723 // Contact model
724 consts::ContactModelType cType = consts::ContactModelType::cntctM_NA;
725
726 // Penalty parameter
727 double k = 0.0;
728
729 // Min depth of penetration
730 double h = 0.0;
731
732 // Max depth of penetration
733 double c = 0.0;
734
735 // Min norm of face normals in contact
736 double al = 0.0;
737
738 // Tolerance
739 double tol = 0.0;
740};
741
743{
744 public:
745 // GenBC_Dir/GenBC_Neu
746 consts::CplBCType bGrp = consts::CplBCType::cplBC_NA;
747
748 // Pointer to X
749 int Xptr = -1;
750
751 // Internal genBC use
752 int eqv = 0;
753
754 // Flow rates at t
755 double Qo = 0.0;
756
757 // Flow rates at t+dt
758 double Qn = 0.0;
759
760 // Pressures at t
761 double Po = 0.0;
762
763 // Pressures at t+dt
764 double Pn = 0.0;
765
766 // Imposed flow/pressure
767 double y = 0.0;
768
769 // Name of the face
770 std::string name;
771
772 // RCR type BC
773 rcrType RCR;
774};
775
776//----------------------------
777// svZeroDSolverInterfaceType
778//----------------------------
779// This class stores information used to interface to
780// the svZeroDSolver.
781//
783{
784 public:
785
786 // The path/name of the 0D solver shared library.
787 std::string solver_library;
788
789 // The path/name of the 0D solver JSON file.
790 std::string configuration_file;
791
792 // How often the 0D contribution to solver tangent matrix is added.
793 std::string coupling_type;
794
795 // Initialize the 0D flows.
796 bool have_initial_flows = false;
797 double initial_flows;
798
799 // Initialize the 0D pressures.
800 bool have_initial_pressures = false;
801 double initial_pressures;
802
803 // If the data has been set for the interface. This is only true if
804 // the svZeroDSolver_interface XML parameter has been defined.
805 bool has_data = false;
806
807 void set_data(const svZeroDSolverInterfaceParameters& params);
808};
809
810/// @brief For coupled 0D-3D problems
811//
813{
814 public:
815 cplBCType();
816 /// @brief Is multi-domain active
817 bool coupled = false;
818
819 /// @brief Whether to use genBC
820 bool useGenBC = false;
821
822 // Whether to use svZeroD
823 bool useSvZeroD = false;
824
825 // Whether to initialize RCR from flow data
826 bool initRCR = false;
827
828 /// @brief Number of coupled faces
829 int nFa = 0;
830
831 /// @brief Number of \c Time_dependence Coupled BCs for svZeroD (set in \c init_svZeroD).
833
834 /// @brief (\c iEq, \c iBc) for each svZeroD coupled BC in deterministic traversal order.
835 std::vector<std::pair<int, int>> svZeroD_coupled_bc_idxs;
836
837 /// @brief Number of unknowns in the 0D domain
838 int nX = 0;
839
840 /// @brief Number of output variables addition to nX
841 int nXp = 0;
842
843 /// @brief Implicit/Explicit/Semi-implicit schemes
844 consts::CplBCType schm = consts::CplBCType::cplBC_NA;
845 //int schm = cplBC_NA;
846
847 /// @brief Path to the 0D code binary file
848 std::string binPath;
849
850 /// @brief File name for communication between 0D and 3D
851 std::string commuName;
852 //std::string commuName = ".CPLBC_0D_3D.tmp";
853
854 svZeroDSolverInterfaceType svzerod_solver_interface;
855
856 /// @brief The name of history file containing "X"
857 std::string saveName;
858 //std::string(LEN=stdL) :: saveName = "LPN.dat";
859
860 /// @brief New time step unknowns in the 0D domain
862
863 /// @brief Old time step unknowns in the 0D domain
865
866 /// @brief Output variables to be printed
868
869 /// @brief Data structure used for communicating with 0D code
870 std::vector<cplFaceType> fa;
871};
872
873/// @brief This is the container for a mesh or NURBS patch, those specific
874/// to NURBS are noted
875//
877{
878 public:
879 mshType();
880 std::string dname = "";
881
882/*
883 mshType(const mshType &other)
884 {
885 std::cout << "c c c c c mshType copy c c c c c" << std::endl;
886 }
887
888 mshType& operator = (const mshType &other)
889 {
890 std::cout << "= = = = = mshType assignment = = = = =" << std::endl;
891 return *this;
892 }
893*/
894
895 ~mshType()
896 {
897 //std::cout << "- - - - - mshType dtor - - - - - dname: " << dname << std::endl;
898 };
899
900 /// @brief Whether the shape function is linear
901 bool lShpF = false;
902
903 /// @brief Whether the mesh is shell
904 bool lShl = false;
905
906 /// @brief Whether the mesh is fibers (Purkinje)
907 bool lFib = false;
908
909 /// @brief Element type
910 consts::ElementType eType = consts::ElementType::NA;
911 //int eType = eType_NA
912
913 /// @brief Number of nodes (control points) in a single element
914 int eNoN = 0;
915
916 /// @brief Global number of elements (knot spans)
917 int gnEl = 0;
918
919 /// @brief Global number of nodes (control points) on a single mesh
920 int gnNo = 0;
921
922 /// @brief Number of element face. Used for reading Gambit mesh files
923 int nEf = 0;
924
925 /// @brief Number of elements (knot spans)
926 int nEl = 0;
927
928 /// @brief Number of faces
929 int nFa = 0;
930
931 /// @brief Number of function spaces
932 int nFs = 0;
933
934 /// @brief Number of Gauss points for integration
935 int nG = 0;
936
937 /// @brief Number of nodes (control points) for 2D elements?
938 int nNo = 0;
939
940 /// @brief Number of elements sample points to be outputs (NURBS)
941 int nSl = 0;
942
943 /// @brief The element type recognized by VTK format
944 int vtkType = 0;
945
946 /// @brief Number of fiber directions
947 int nFn = 0;
948
949 /// @brief Mesh scale factor
950 double scF = 0.0;
951
952 /// @brief IB: Mesh size parameter
953 double dx = 0.0;
954
955 /// @brief RIS resistance value
956 double res = 0.0;
957
958 /// @brief RIS projection tolerance
959 double tol = 0.0;
960
961 /// @brief The volume of this mesh
962 double v = 0.0;
963
964 /// @breif ordering: node ordering for boundaries
965 std::vector<std::vector<int>> ordering;
966
967 /// @brief Element distribution between processors
969
970 /// @brief Element domain ID number
972
973 /// @brief Global nodes maping nNo --> tnNo
975
976 /// @brief GLobal projected nodes mapping projected -> unprojected mapping
978
979 /// @brief Global connectivity array mappig eNoN,nEl --> gnNo
980 Array<int> gIEN;
981
982 /// @brief The connectivity array mapping eNoN,nEl --> nNo
983 Array<int> IEN;
984
985 /// @brief gIEN mapper from old to new
987
988 /// @brief Local knot pointer (NURBS)
989 Array<int> INN;
990
991 /// @brief Global to local maping tnNo --> nNo
993
994 /// @brief Shells: extended IEN array with neighboring nodes
995 Array<int> eIEN;
996
997 /// @brief Shells: boundary condition variable
998 Array<int> sbc;
999
1000 /// @brief IB: Whether a cell is a ghost cell or not
1002
1003 /// @brief Control points weights (NURBS)
1005
1006 /// @brief Gauss weights
1008
1009 /// @brief Gauss integration points in parametric space
1010 Array<double> xi;
1011
1012 /// @brief Bounds on parameteric coordinates
1013 Array<double> xib;
1014
1015 /// @brief Position coordinates (not always, however, as they get overwritten by read_vtu_pdata())
1016 Array<double> x;
1017
1018 /// @brief Parent shape function
1019 Array<double> N;
1020
1021 /// @brief Shape function bounds
1022 Array<double> Nb;
1023
1024 /// @brief Normal vector to each nodal point (for Shells)
1025 Array<double> nV;
1026
1027 /// @brief Fiber orientations stored at the element level - used for
1028 /// electrophysiology and solid mechanics
1029 Array<double> fN;
1030
1031 /// @brief Parent shape functions gradient
1032 /// double Nx(:,:,:)
1034
1035 /// @brief Second derivatives of shape functions - used for shells & IGA
1036 /// davep double Nxx(:,:,:)
1038
1039 /// @brief Solution field (displacement, velocity, pressure, etc.) for a known, potentially
1040 /// time-varying, quantity of interest across a mesh
1042
1043 /// @brief Mesh Name
1044 std::string name;
1045
1046 /// @brief Mesh nodal adjacency
1048
1049 /// @brief Mesh element adjacency
1051
1052 /// @brief Function spaces (basis)
1053 std::vector<fsType> fs;
1054
1055 /// @brief BSpline in different directions (NURBS)
1056 std::vector<bsType> bs;
1057
1058 /// @brief Faces are stored in this variable
1059 std::vector<faceType> fa;
1060
1061 /// @brief IB: tracers
1063
1064 /// @brief RIS: flags of whether elemets are adjacent to RIS projections
1065 // std::vector<bool> eRIS;
1067
1068 /// @brief RIS: processor ids to change element partitions to
1070
1071 /// @brief TET4 quadrature modifier
1072 double qmTET4 = (5.0+3.0*sqrt(5.0))/20.0;
1073
1074 private:
1075 //mshType(const mshType&);
1076 //mshType& operator=(const mshType&);
1077
1078};
1079
1080/// @brief Equation type
1081//
1083{
1084 public:
1085 eqType();
1086 ~eqType();
1087
1088 /// @brief Should be satisfied in a coupled/uncoupled fashion
1089 bool coupled = false;
1090 //bool coupled = .TRUE.
1091
1092 /// @brief Satisfied/not satisfied
1093 bool ok = false;
1094
1095 /// @brief Use C++ Trilinos framework for the linear solvers
1096 bool useTLS = false;
1097
1098 /// @brief Use C++ Trilinos framework for assembly and for linear solvers
1099 bool assmTLS = false;
1100
1101 /// @brief Degrees of freedom
1102 int dof = 0;
1103
1104 /// @brief Pointer to end of unknown Yo(:,s:e)
1105 int e = -1;
1106
1107 /// @brief Pointer to start of unknown Yo(:,s:e)
1108 int s = -1;
1109
1110 /// @brief Number of performed iterations
1111 int itr = 0;
1112
1113 /// @brief Maximum iteration for this eq.
1114 int maxItr = 5;
1115
1116 /// @brief Minimum iteration for this eq.
1117 int minItr = 1;
1118
1119 /// @brief Number of possible outputs
1120 int nOutput = 0;
1121
1122 /// @brief IB: Number of possible outputs
1123 int nOutIB = 0;
1124
1125 /// @brief URIS: Number of possible outputs
1126 int nOutURIS = 0;
1127
1128 /// @brief Number of domains
1129 int nDmn = 0;
1130
1131 /// @brief IB: Number of immersed domains
1132 int nDmnIB = 0;
1133
1134 /// @brief Number of BCs
1135 int nBc = 0;
1136
1137 /// @brief Number of BCs on immersed surfaces
1138 int nBcIB = 0;
1139
1140 /// @brief Number of BFs
1141 int nBf = 0;
1142
1143 /// @brief Type of equation fluid/heatF/heatS/lElas/FSI
1144 consts::EquationType phys = consts::EquationType::phys_NA;
1145
1146 // Parameters used for the Generalized α− Method.
1147 //
1148 /// @brief \f$\alpha_f\f$
1149 double af = 0.0;
1150
1151 /// @brief \f$\alpha_m\f$
1152 ///
1153 /// For second order equations: am = (2.0 - roInf) / (1.0 + roInf)
1154 /// First order equations: am = 0.5 * (3.0 - roInf) / (1.0 + roInf)
1155 //
1156 double am = 0.0;
1157
1158 /// @brief \f$\beta\f$
1159 double beta = 0.0;
1160
1161 /// @brief \f$\gamma\f$
1162 double gam = 0.0;
1163
1164 /// @brief Initial norm of residual
1165 double iNorm = 0.0;
1166
1167 /// @brief First iteration norm
1168 double pNorm = 0.0;
1169
1170 /// @brief \f$\rho_{infinity}\f$
1171 double roInf = 0.0;
1172
1173 /// @brief Accepted relative tolerance
1174 double tol = 0.0;
1175
1176 /// @brief Equation symbol
1177 std::string sym;
1178 //std::string(LEN=2) :: sym = "NA";
1179
1180 /// @brief type of linear solver
1182
1183 /// @brief The type of interface to a numerical linear algebra library.
1184 consts::LinearAlgebraType linear_algebra_type;
1185
1186 /// @brief The type of assembly interface to a numerical linear algebra library.
1187 consts::LinearAlgebraType linear_algebra_assembly_type;
1188
1189 /// @brief The type of preconditioner used by the interface to a numerical linear algebra library.
1190 consts::PreconditionerType linear_algebra_preconditioner = consts::PreconditionerType::PREC_FSILS;
1191
1192 /// @brief Interface to a numerical linear algebra library.
1194
1195 /// @brief FSILS type of linear solver
1196 fsi_linear_solver::FSILS_lsType FSILS;
1197
1198 /// @brief BCs associated with this equation;
1199 std::vector<bcType> bc;
1200
1201 /// @brief IB: BCs associated with this equation on immersed surfaces
1202 std::vector<bcType> bcIB;
1203
1204 /// @brief domains that this equation must be solved
1205 std::vector<dmnType> dmn;
1206
1207 /// @brief IB: immersed domains that this equation must be solved
1208 std::vector<dmnType> dmnIB;
1209
1210 /// @brief Outputs
1211 std::vector<outputType> output;
1212
1213 /// @brief IB: Outputs
1214 std::vector<outputType> outIB;
1215
1216 /// @brief URIS: Outputs
1217 std::vector<outputType> outURIS;
1218
1219 /// @brief Explicit geometry coupling
1220 bool expl_geom_cpl = false;
1221
1222 /// @brief Body force associated with this equation
1223 std::vector<bfType> bf;
1224};
1225
1226/// @brief This type will be used to write data in the VTK files.
1227//
1229{
1230 public:
1231
1232 // Element number of nodes
1233 int eNoN = 0;
1234
1235 // Number of elements
1236 int nEl = 0;
1237
1238 // Number of nodes
1239 int nNo = 0;
1240
1241 // vtk type
1242 int vtkType = 0;
1243
1244 // Connectivity array
1245 Array<int> IEN;
1246
1247 // Element based variables to be written
1248 Array<double> xe;
1249
1250 // All the variables after transformation to global format
1251 Array<double> gx;
1252
1253 // All the variables to be written (including position)
1254 Array<double> x;
1255};
1256
1257
1259{
1260 public:
1261
1262 rmshType();
1263
1264 /// @brief Whether remesh is required for problem or not
1265 bool isReqd = false;
1266
1267 /// @brief Method for remeshing: 1-TetGen, 2-MeshSim
1268 consts::MeshGeneratorType method = consts::MeshGeneratorType::RMSH_TETGEN;
1269
1270 /// @brief Counter to track number of remesh done
1271 int cntr = 0;
1272
1273 /// @brief Time step from which remeshing is done
1274 int rTS = 0;
1275
1276 /// @brief Time step freq for saving data
1277 int cpVar = 0;
1278
1279 /// @brief Time step at which forced remeshing is done
1280 int fTS = 1000;
1281
1282 /// @brief Time step frequency for forced remeshing
1283 int freq = 1000;
1284
1285 /// @brief Time where remeshing starts
1286 double time = 0.0;
1287
1288 /// @brief Mesh quality parameters
1289 double minDihedAng = 0.0;
1290 double maxRadRatio = 0.0;
1291
1292 /// @brief Edge size of mesh
1294
1295 /// @brief Initial norm of an equation
1297
1298 /// @brief Copy of solution variables where remeshing starts
1299 Array<double> A0;
1300 Array<double> Y0;
1301 Array<double> D0;
1302
1303 /// @brief Flag is set if remeshing is required for each mesh
1304 std::vector<bool> flag;
1305};
1306
1308{
1309 public:
1310 /// @brief Num traces (nodes) local to each process
1312
1313 /// @brief Pointer to global trace (node num) stacked contiguously
1315
1316 /// @brief Num traces (Gauss points) local to each process
1318
1319 /// @brief Pointer to global trace (Gauss point) stacked contiguously
1321};
1322
1323
1324/// @brief Immersed Boundary (IB) data type
1325//
1327{
1328 public:
1329
1330 /// @brief Whether any file being saved
1331 bool savedOnce = false;
1332 //bool savedOnce = .FALSE.
1333
1334 /// @brief IB method
1335 int mthd = 0;
1336 //int mthd = ibMthd_NA;
1337
1338 /// @brief IB coupling
1339 int cpld = 0;
1340 //int cpld = ibCpld_NA;
1341
1342 /// @brief IB interpolation method
1343 int intrp = 0;
1344 //int intrp = ibIntrp_NA;
1345
1346 /// @brief Current IB domain ID
1347 int cDmn = 0;
1348
1349 /// @brief Current equation
1350 int cEq = 0;
1351
1352 /// @brief Total number of IB nodes
1353 int tnNo = 0;
1354
1355 /// @brief Number of IB meshes
1356 int nMsh = 0;
1357
1358 /// @brief IB call duration (1: total time; 2: update; 3,4: communication)
1359 double callD[4] = {0.0, 0.0, 0.0, 0.0};
1360
1361 /// @brief IB Domain ID
1363
1364 /// @brief Row pointer (for sparse LHS matrix storage)
1366
1367 /// @brief Column pointer (for sparse LHS matrix storage)
1369
1370 /// @brief IB position coordinates
1371 Array<double> x;
1372
1373 /// @brief Velocity (new)
1374 Array<double> Yb;
1375
1376 /// @brief Time derivative of displacement (old)
1377 Array<double> Auo;
1378
1379 /// @brief Time derivative of displacement (new)
1380 Array<double> Aun;
1381
1382 /// @brief Time derivative of displacement (n+am)
1383 Array<double> Auk;
1384
1385 /// @brief Displacement (old)
1386 Array<double> Ubo;
1387
1388 /// @brief Displacement (new)
1389 Array<double> Ubn;
1390
1391 /// @brief Displacement (n+af)
1392 Array<double> Ubk;
1393
1394 /// @brief Displacement (projected on background mesh, old)
1395 Array<double> Uo;
1396
1397 /// @brief Displacement (projected on background mesh, new, n+af)
1398 Array<double> Un;
1399
1400 /// @brief Residual (FSI force)
1401 Array<double> R;
1402
1403 /// @brief Residual (displacement, background mesh)
1404 Array<double> Ru;
1405
1406 /// @brief Residual (displacement, IB mesh)
1407 Array<double> Rub;
1408
1409 /// @brief LHS tangent matrix for displacement
1410 Array<double> Ku;
1411
1412 /// @brief DERIVED class VARIABLES IB meshes;
1413 std::vector<mshType> msh;
1414
1415 /// @brief IB communicator
1417};
1418
1419/// @brief Data type for Resistive Immersed Surface
1420//
1422{
1423 public:
1424
1425 /// @brief Number of RIS surface
1426 int nbrRIS = 0;
1427
1428 /// @brief Count time steps where no check is needed
1430
1431 /// @brief List of meshes, and faces connected. The first face is the
1432 // proximal pressure's face, while the second is the distal one
1434
1435 /// @brief Resistance value
1437
1438 /// @brief Flag closed surface active, the valve is considerd open initially
1439 std::vector<bool> clsFlg;
1440
1441 /// @brief Mean distal and proximal pressure (1: distal, 2: proximal)
1442 Array<double> meanP;
1443
1444 /// @brief Mean flux on the RIS surface
1446
1447 /// @brief Status RIS interface
1448 std::vector<bool> status;
1449};
1450
1451/// @brief Unfitted Resistive Immersed surface data type
1452//
1454{
1455 public:
1456
1457 // Name of the URIS instance.
1458 std::string name;
1459
1460 // Whether any file has been saved.
1461 bool savedOnce = false;
1462
1463 // Total number of IB nodes.
1464 int tnNo = 0;
1465
1466 // Number of IB meshes.
1467 int nFa = 0;
1468
1469 // Valve surface position coordinates.
1470 Array<double> x;
1471
1472 // Valve position coordinates at the previous time step.
1473 Array<double> x_prev;
1474
1475 // Valve velocity on the valve surface nodes.
1476 Array<double> valve_velocity;
1477
1478 // Valve displacement.
1479 Array<double> Yd;
1480
1481 // Default signed distance value away from the valve.
1482 double sdf_default;
1483
1484 // Half-valve thickness when the valve is open.
1485 double sdf_deps;
1486
1487 // Half-thickness used when the valve is closed. Set larger than sdf_deps
1488 // if the fully closed position alone is not able to prevent backflow.
1489 double sdf_deps_close;
1490
1491 // Resistance value of the valve.
1492 double resistance;
1493
1494 // Whether to invert the valve surface normal vector. Default is false.
1495 //
1496 // Valve normal vectors are assumed to point downstream, so that the
1497 // downstream region has positive signed distance and the upstream region
1498 // has negative signed distance. If the input surface does not satisfy
1499 // this assumption, this flag should be set to true to flip the normals.
1500 bool invert_normal;
1501
1502 // Whether to include the valve velocity in the RIS implementation. Default is false.
1503 bool include_uris_velocity = false;
1504
1505 // Opening positions of the valve surfaces.
1506 Array3<double> DxOpen;
1507
1508 // Closing positions of the valve surfaces.
1509 Array3<double> DxClose;
1510
1511 // Normal vector pointing in the positive flow direction.
1512 Vector<double> nrm;
1513
1514 // Close flag.
1515 bool clsFlg;
1516
1517 // Iteration count.
1518 int cnt = 1000000;
1519
1520 // Flag to indicate if the SDF is computed.
1521 bool sdf_computed = false;
1522
1523 // Signed distance function indexed by backgroundfluid mesh node.
1524 Vector<double> sdf;
1525
1526 // Valve velocity interpolated on background fluid mesh nodes.
1527 Array<double> valve_velocity_fluid;
1528
1529 // Mesh scale factor.
1530 double scF;
1531
1532 // Mean pressure upstream.
1533 double meanPU = 0.0;
1534
1535 // Mean pressure downstream.
1536 double meanPD = 0.0;
1537
1538 // Relaxation factor to compute weighted averages of pressure values.
1539 double relax_factor = 0.5;
1540
1541 // elemId(0, nd) = mesh index jM, elemId(1, nd) = element index iEln
1542 // for the fluid element containing immersed surface node nd.
1543 // Set to -1 if no containing element was found on this rank.
1544 Array<int> elemId;
1545
1546 // Per-node ownership flag set by uris_find_tetra. A value of 1 means this
1547 // rank own that node and is used for interpolating its displacement.
1548 // A value of 0 means another rank owns it and this rank skips it to avoid
1549 //double-counting in the MPI_SUM gather.
1550 Vector<int> localNode;
1551
1552 // Derived type variables
1553 // IB meshes
1554 std::vector<mshType> msh;
1555
1556};
1557
1558/// @brief The ComMod class duplicates the data structures in the Fortran COMMOD module
1559/// defined in MOD.f.
1560///
1561/// The data members here are the global variables exposed by the COMMOD module.
1562//
1563class ComMod {
1564
1565 public:
1566 ComMod();
1567 ~ComMod();
1568
1569 //----- bool members -----//
1570
1571 /// @brief Whether there is a requirement to update mesh and Dn-Do variables
1572 bool dFlag = false;
1573
1574 /// @brief Whether mesh is moving
1575 bool mvMsh = false;
1576
1577 /// @brief Whether to averaged results
1578 bool saveAve = false;
1579
1580 /// @brief Whether to save to VTK files
1581 bool saveVTK = false;
1582
1583 /// @brief Whether any file being saved
1584 bool savedOnce = false;
1585
1586 /// @brief Whether to use separator in output
1587 bool sepOutput = false;
1588
1589 /// @brief Whether start from beginning or from simulations
1590 bool stFileFlag = false;
1591
1592 /// @brief Whether to overwrite restart file or not
1593 bool stFileRepl = false;
1594
1595 /// @brief Restart simulation after remeshing
1596 bool resetSim = false;
1597
1598 /// @brief Check IEN array for initial mesh
1599 bool ichckIEN = false;
1600
1601 /// @brief Reset averaging variables from zero
1602 bool zeroAve = false;
1603
1604 /// @brief Whether CMM equation is initialized
1605 bool cmmInit = false;
1606
1607 /// @brief Whether variable wall properties are used for CMM
1608 bool cmmVarWall = false;
1609
1610 /// @brief Whether shell equation is being solved
1611 bool shlEq = false;
1612
1613 /// @brief Whether PRESTRESS is being solved
1614 bool pstEq = false;
1615
1616 /// @brief Whether velocity-pressure based structural dynamics solver is used
1617 bool sstEq = false;
1618
1619 /// @brief Whether to detect and apply any contact model
1620 bool iCntct = false;
1621
1622 /// @brief Whether any Immersed Boundary (IB) treatment is required
1623 bool ibFlag = false;
1624
1625 /// @brief Postprocess step - convert bin to vtk
1626 bool bin2VTK = false;
1627
1628 /// @brief Whether any RIS surface is considered
1629 bool risFlag = false;
1630
1631 /// @brief Whether any one-sided RIS surface with 0D coupling is considered
1632 bool ris0DFlag = false;
1633
1634 /// @brief Whether any URIS surface is considered
1635 bool urisFlag = false;
1636
1637 /// @brief Whether the URIS surface is active
1638 bool urisActFlag = false;
1639
1640 /// @brief Number of URIS surfaces (uninitialized, to be set later)
1642
1643 /// @brief Fluid-related node mask for URIS SDF. Built once when
1644 /// consistent with tnNo; rebuilt automatically if tnNo changes.
1645 std::vector<bool> urisFluidNodeMask;
1646
1647 /// @brief Whether to use precomputed state-variable solutions
1648 bool usePrecomp = false;
1649 //----- int members -----//
1650
1651 /// @brief Current domain
1652 int cDmn = 0;
1653
1654 /// @brief Current equation
1655 int cEq = 0;
1656
1657 /// @brief Current time step
1658 int cTS = 0;
1659
1660 std::array<double,3> timeP;
1661
1662 /// @brief Starting time step
1663 int startTS = 0;
1664
1665 /// @brief Current equation degrees of freedom
1666 int dof = 0;
1667
1668 /// @brief Global total number of nodes, across all meshes (total) and all
1669 /// procs (global)
1670 int gtnNo = 0;
1671
1672 /// @brief Number of equations
1673 int nEq = 0;
1674
1675 /// @brief Number of faces in the LHS passed to FSILS
1676 int nFacesLS = 0;
1677
1678 /// @brief Number of meshes
1679 int nMsh = 0;
1680
1681 /// @brief Number of spatial dimensions
1682 int nsd = 0;
1683
1684 /// @brief Number of time steps
1685 int nTS = 0;
1686
1687 /// @brief Number of initialization time steps
1688 int nITs = 0;
1689
1690 /// @brief stFiles record length
1691 int recLn = 0;
1692
1693 /// @brief Start saving after this number of time step
1694 int saveATS = 0;
1695
1696 /// @brief Increment in saving solutions
1697 int saveIncr = 0;
1698
1699 /// @brief Stamp ID to make sure simulation is compatible with stFiles
1700 std::array<int,7> stamp;
1701
1702 /// @brief Increment in saving restart file
1703 int stFileIncr = 0;
1704
1705 /// @brief Total number of degrees of freedom per node
1706 int tDof = 0;
1707
1708 /// @brief Total number of nodes (number of nodes on current proc across
1709 /// all meshes)
1710 int tnNo = 0;
1711
1712 /// @brief Restart Time Step
1713 int rsTS = 0;
1714
1715 /// @brief Number of stress values to be stored
1716 int nsymd = 0;
1717
1718 /// @brief Nbr of iterations
1719 int RisnbrIter = 0;
1720
1721
1722 //----- double members -----//
1723
1724 /// @brief Time step size
1725 double dt = 0.0;
1726
1727 /// @brief Time step size of the precomputed state-variables
1728 double precompDt = 0.0;
1729
1730 /// @brief Time
1731 double time = 0.0;
1732
1733
1734 //----- string members -----//
1735
1736 /// @brief Initialization file path
1737 std::string iniFilePath;
1738
1739 /// @brief Saved output file name
1740 std::string saveName;
1741
1742 /// @brief Restart file name
1743 std::string stFileName;
1744
1745 /// @brief Stop_trigger file name
1746 std::string stopTrigName;
1747
1748 /// @brief Precomputed state-variable file name
1749 std::string precompFileName;
1750
1751 /// @brief Precomputed state-variable field name
1752 std::string precompFieldName;
1753 // ALLOCATABLE DATA
1754
1755 /// @brief Column pointer (for sparse LHS matrix structure)
1756 /// Modified in: lhsa()
1758
1759 /// @brief Domain ID
1761
1762 /// @brief Local to global pointer tnNo --> gtnNo
1764
1765 /// @brief Row pointer (for sparse LHS matrix structure)
1766 /// Modified in: lhsa()
1768
1769 /// @brief Array that maps global node id to rowN in the matrix
1770 /// Modified in: lhsa()
1772
1773 /// @brief Boundary nodes set for CMM initialization and for zeroing-out
1774 /// non-wall nodal displacements
1776
1777 /// @brief IB: iblank used for immersed boundaries (1 => solid, 0 => fluid)
1779
1780 /// @brief TODO: for now, better to organize these within a class
1781 struct Array2D {
1782 // std::vector<std::vector<int>> map;
1783 Array<int> map;
1784 };
1785
1786 /// @brief RIS mapping array, with local (mesh) enumeration
1787 std::vector<Array2D> risMapList;
1788
1789 /// @brief RIS mapping array, with global (total) enumeration
1790 std::vector<Array2D> grisMapList;
1791
1792 /// @brief Residual vector
1793 Array<double> R;
1794
1795 /// @brief LHS matrix
1796 Array<double> Val;
1797
1798 /// @brief Position vector of mesh nodes (in ref config)
1799 Array<double> x;
1800
1801 /// @brief Body force
1802 Array<double> Bf;
1803
1804 //-----------------------------------------------------
1805 // Additional arrays for velocity-based formulation of
1806 // nonlinear solid mechanics.
1807 //-----------------------------------------------------
1808
1809 /// @brief Time derivative of displacement
1810 Array<double> Ad;
1811
1812 /// @brief Residual of the displacement equation
1813 Array<double> Rd;
1814
1815 /// @brief LHS matrix for displacement equation
1816 Array<double> Kd;
1817
1818 /// @brief Variables for prestress calculations
1819 Array<double> pS0;
1820 Array<double> pSn;
1821 Vector<double> pSa;
1822
1823 /// @brief Temporary storage for initializing state variables
1825 Array<double> Vinit;
1826 Array<double> Dinit;
1827
1828 /// @brief CMM-variable wall properties: 1-thickness, 2-Elasticity modulus
1829 Array<double> varWallProps;
1830
1831 //------------------------
1832 // DERIVED TYPE VARIABLES
1833 //------------------------
1834
1835 /// @brief Coupled BCs structures used for multidomain simulations
1837
1838 /// @brief All data related to equations are stored in this container
1839 std::vector<eqType> eq;
1840
1841 /// @brief FSILS data structure to produce LHS sparse matrix
1842 fsi_linear_solver::FSILS_lhsType lhs;
1843
1844 /// @brief All the meshes are stored in this variable
1845 std::vector<mshType> msh;
1846
1847 /// @brief Input/output to the screen is handled by this structure
1848 chnlType std, err, wrn, dbg;
1849
1850 /// @brief To group above channels
1852
1853 /// @brief The general communicator
1855
1856 /// @brief Remesher type
1858
1859 /// @brief Contact model type
1861
1862 /// @brief IB: Immersed boundary data structure
1864
1865 /// @brief risFace object
1867
1868 /// @brief unfitted RIS object
1869 std::vector<urisType> uris;
1870
1871 bool debug_active = false;
1872
1873 Timer timer;
1874};
1875
1876#endif
1877
The Array3 template class implements a simple interface to 3D arrays.
Definition Array3.h:25
Definition ArtificialNeuralNetMaterial.h:30
The ComMod class duplicates the data structures in the Fortran COMMOD module defined in MOD....
Definition ComMod.h:1563
std::string stopTrigName
Stop_trigger file name.
Definition ComMod.h:1746
ibType ib
IB: Immersed boundary data structure.
Definition ComMod.h:1863
int stFileIncr
Increment in saving restart file.
Definition ComMod.h:1703
int nITs
Number of initialization time steps.
Definition ComMod.h:1688
bool ibFlag
Whether any Immersed Boundary (IB) treatment is required.
Definition ComMod.h:1623
Vector< int > colPtr
Column pointer (for sparse LHS matrix structure) Modified in: lhsa()
Definition ComMod.h:1757
bool zeroAve
Reset averaging variables from zero.
Definition ComMod.h:1602
std::string saveName
Saved output file name.
Definition ComMod.h:1740
std::vector< Array2D > grisMapList
RIS mapping array, with global (total) enumeration.
Definition ComMod.h:1790
int nMsh
Number of meshes.
Definition ComMod.h:1679
chnlType std
Input/output to the screen is handled by this structure.
Definition ComMod.h:1848
bool savedOnce
Whether any file being saved.
Definition ComMod.h:1584
risFaceType ris
risFace object
Definition ComMod.h:1866
bool stFileRepl
Whether to overwrite restart file or not.
Definition ComMod.h:1593
Array< double > varWallProps
CMM-variable wall properties: 1-thickness, 2-Elasticity modulus.
Definition ComMod.h:1829
Array< double > x
Position vector of mesh nodes (in ref config)
Definition ComMod.h:1799
bool cmmVarWall
Whether variable wall properties are used for CMM.
Definition ComMod.h:1608
std::array< int, 7 > stamp
Stamp ID to make sure simulation is compatible with stFiles.
Definition ComMod.h:1700
Array< double > Ad
Time derivative of displacement.
Definition ComMod.h:1810
int cTS
Current time step.
Definition ComMod.h:1658
int dof
Current equation degrees of freedom.
Definition ComMod.h:1666
bool urisFlag
Whether any URIS surface is considered.
Definition ComMod.h:1635
int gtnNo
Global total number of nodes, across all meshes (total) and all procs (global)
Definition ComMod.h:1670
std::string stFileName
Restart file name.
Definition ComMod.h:1743
int tnNo
Total number of nodes (number of nodes on current proc across all meshes)
Definition ComMod.h:1710
int nsd
Number of spatial dimensions.
Definition ComMod.h:1682
int nFacesLS
Number of faces in the LHS passed to FSILS.
Definition ComMod.h:1676
int nsymd
Number of stress values to be stored.
Definition ComMod.h:1716
bool ichckIEN
Check IEN array for initial mesh.
Definition ComMod.h:1599
std::string iniFilePath
Initialization file path.
Definition ComMod.h:1737
Vector< int > rowPtr
Row pointer (for sparse LHS matrix structure) Modified in: lhsa()
Definition ComMod.h:1767
std::string precompFileName
Precomputed state-variable file name.
Definition ComMod.h:1749
std::vector< Array2D > risMapList
RIS mapping array, with local (mesh) enumeration.
Definition ComMod.h:1787
int cEq
Current equation.
Definition ComMod.h:1655
Vector< int > cmmBdry
Boundary nodes set for CMM initialization and for zeroing-out non-wall nodal displacements.
Definition ComMod.h:1775
Array< double > Val
LHS matrix.
Definition ComMod.h:1796
std::vector< bool > urisFluidNodeMask
Fluid-related node mask for URIS SDF. Built once when consistent with tnNo; rebuilt automatically if ...
Definition ComMod.h:1645
bool bin2VTK
Postprocess step - convert bin to vtk.
Definition ComMod.h:1626
bool saveAve
Whether to averaged results.
Definition ComMod.h:1578
bool saveVTK
Whether to save to VTK files.
Definition ComMod.h:1581
int tDof
Total number of degrees of freedom per node.
Definition ComMod.h:1706
std::vector< urisType > uris
unfitted RIS object
Definition ComMod.h:1869
bool ris0DFlag
Whether any one-sided RIS surface with 0D coupling is considered.
Definition ComMod.h:1632
bool risFlag
Whether any RIS surface is considered.
Definition ComMod.h:1629
std::string precompFieldName
Precomputed state-variable field name.
Definition ComMod.h:1752
bool cmmInit
Whether CMM equation is initialized.
Definition ComMod.h:1605
Array< double > Rd
Residual of the displacement equation.
Definition ComMod.h:1813
cplBCType cplBC
Coupled BCs structures used for multidomain simulations.
Definition ComMod.h:1836
double time
Time.
Definition ComMod.h:1731
bool pstEq
Whether PRESTRESS is being solved.
Definition ComMod.h:1614
bool resetSim
Restart simulation after remeshing.
Definition ComMod.h:1596
double dt
Time step size.
Definition ComMod.h:1725
bool urisActFlag
Whether the URIS surface is active.
Definition ComMod.h:1638
Array< double > R
Residual vector.
Definition ComMod.h:1793
rmshType rmsh
Remesher type.
Definition ComMod.h:1857
int saveIncr
Increment in saving solutions.
Definition ComMod.h:1697
bool usePrecomp
Whether to use precomputed state-variable solutions.
Definition ComMod.h:1648
ioType io
To group above channels.
Definition ComMod.h:1851
cntctModelType cntctM
Contact model type.
Definition ComMod.h:1860
int RisnbrIter
Nbr of iterations.
Definition ComMod.h:1719
cmType cm
The general communicator.
Definition ComMod.h:1854
int nUris
Number of URIS surfaces (uninitialized, to be set later)
Definition ComMod.h:1641
int startTS
Starting time step.
Definition ComMod.h:1663
Vector< int > idMap
Array that maps global node id to rowN in the matrix Modified in: lhsa()
Definition ComMod.h:1771
bool stFileFlag
Whether start from beginning or from simulations.
Definition ComMod.h:1590
bool sepOutput
Whether to use separator in output.
Definition ComMod.h:1587
bool shlEq
Whether shell equation is being solved.
Definition ComMod.h:1611
std::vector< eqType > eq
All data related to equations are stored in this container.
Definition ComMod.h:1839
bool iCntct
Whether to detect and apply any contact model.
Definition ComMod.h:1620
double precompDt
Time step size of the precomputed state-variables.
Definition ComMod.h:1728
bool dFlag
Whether there is a requirement to update mesh and Dn-Do variables.
Definition ComMod.h:1572
int cDmn
Current domain.
Definition ComMod.h:1652
int nTS
Number of time steps.
Definition ComMod.h:1685
int nEq
Number of equations.
Definition ComMod.h:1673
Vector< int > iblank
IB: iblank used for immersed boundaries (1 => solid, 0 => fluid)
Definition ComMod.h:1778
Array< double > Kd
LHS matrix for displacement equation.
Definition ComMod.h:1816
std::vector< mshType > msh
All the meshes are stored in this variable.
Definition ComMod.h:1845
int recLn
stFiles record length
Definition ComMod.h:1691
int rsTS
Restart Time Step.
Definition ComMod.h:1713
bool mvMsh
Whether mesh is moving.
Definition ComMod.h:1575
Vector< double > Pinit
Temporary storage for initializing state variables.
Definition ComMod.h:1824
Vector< int > ltg
Local to global pointer tnNo --> gtnNo.
Definition ComMod.h:1763
fsi_linear_solver::FSILS_lhsType lhs
FSILS data structure to produce LHS sparse matrix.
Definition ComMod.h:1842
Array< double > Bf
Body force.
Definition ComMod.h:1802
Vector< int > dmnId
Domain ID.
Definition ComMod.h:1760
Array< double > pS0
Variables for prestress calculations.
Definition ComMod.h:1819
int saveATS
Start saving after this number of time step.
Definition ComMod.h:1694
bool sstEq
Whether velocity-pressure based structural dynamics solver is used.
Definition ComMod.h:1617
Object-oriented Coupled boundary condition.
Definition CoupledBoundaryCondition.h:182
The LinearAlgebra class provides an abstract interface to linear algebra frameworks: FSILS,...
Definition LinearAlgebra.h:13
Moving boundary data structure (used for general BC)
Definition ComMod.h:85
Definition RobinBoundaryCondition.h:37
Keep track of time.
Definition Timer.h:13
The Vector template class is used for storing int and double data.
Definition Vector.h:24
Mesh adjacency (neighboring element for each element)
Definition ComMod.h:470
Boundary condition data type.
Definition ComMod.h:129
Definition ComMod.h:287
Class storing data for B-Splines.
Definition ComMod.h:212
Cardiac electrophysiology model type.
Definition CepMod.h:89
Channel type, used in I/O.
Definition ChnlMod.h:19
The cmType class stores data and defines methods used for mpi communication.
Definition CmMod.h:55
Contact model type.
Definition ComMod.h:721
For coupled 0D-3D problems.
Definition ComMod.h:813
consts::CplBCType schm
Implicit/Explicit/Semi-implicit schemes.
Definition ComMod.h:844
int nX
Number of unknowns in the 0D domain.
Definition ComMod.h:838
int nFa
Number of coupled faces.
Definition ComMod.h:829
Vector< double > xo
Old time step unknowns in the 0D domain.
Definition ComMod.h:864
std::vector< std::pair< int, int > > svZeroD_coupled_bc_idxs
(iEq, iBc) for each svZeroD coupled BC in deterministic traversal order.
Definition ComMod.h:835
int nSvZeroD_coupled_bc
Number of Time_dependence Coupled BCs for svZeroD (set in init_svZeroD).
Definition ComMod.h:832
bool useGenBC
Whether to use genBC.
Definition ComMod.h:820
std::string binPath
Path to the 0D code binary file.
Definition ComMod.h:848
std::string saveName
The name of history file containing "X".
Definition ComMod.h:857
std::string commuName
File name for communication between 0D and 3D.
Definition ComMod.h:851
bool coupled
Is multi-domain active.
Definition ComMod.h:817
std::vector< cplFaceType > fa
Data structure used for communicating with 0D code.
Definition ComMod.h:870
Vector< double > xp
Output variables to be printed.
Definition ComMod.h:867
Vector< double > xn
New time step unknowns in the 0D domain.
Definition ComMod.h:861
int nXp
Number of output variables addition to nX.
Definition ComMod.h:841
Definition ComMod.h:743
This type will be used to write data in the VTK files.
Definition ComMod.h:1229
Domain type is to keep track with element belong to which domain and also different physical quantiti...
Definition ComMod.h:435
Equation type.
Definition ComMod.h:1083
LinearAlgebra * linear_algebra
Interface to a numerical linear algebra library.
Definition ComMod.h:1193
double roInf
Definition ComMod.h:1171
int maxItr
Maximum iteration for this eq.
Definition ComMod.h:1114
int s
Pointer to start of unknown Yo(:,s:e)
Definition ComMod.h:1108
int nDmnIB
IB: Number of immersed domains.
Definition ComMod.h:1132
bool coupled
Should be satisfied in a coupled/uncoupled fashion.
Definition ComMod.h:1089
bool ok
Satisfied/not satisfied.
Definition ComMod.h:1093
int nBcIB
Number of BCs on immersed surfaces.
Definition ComMod.h:1138
std::string sym
Equation symbol.
Definition ComMod.h:1177
bool expl_geom_cpl
Explicit geometry coupling.
Definition ComMod.h:1220
bool assmTLS
Use C++ Trilinos framework for assembly and for linear solvers.
Definition ComMod.h:1099
lsType ls
type of linear solver
Definition ComMod.h:1181
std::vector< outputType > outIB
IB: Outputs.
Definition ComMod.h:1214
double tol
Accepted relative tolerance.
Definition ComMod.h:1174
bool useTLS
Use C++ Trilinos framework for the linear solvers.
Definition ComMod.h:1096
int itr
Number of performed iterations.
Definition ComMod.h:1111
double gam
Definition ComMod.h:1162
std::vector< outputType > outURIS
URIS: Outputs.
Definition ComMod.h:1217
int nBc
Number of BCs.
Definition ComMod.h:1135
int e
Pointer to end of unknown Yo(:,s:e)
Definition ComMod.h:1105
std::vector< dmnType > dmn
domains that this equation must be solved
Definition ComMod.h:1205
consts::PreconditionerType linear_algebra_preconditioner
The type of preconditioner used by the interface to a numerical linear algebra library.
Definition ComMod.h:1190
int nOutIB
IB: Number of possible outputs.
Definition ComMod.h:1123
double am
Definition ComMod.h:1156
double iNorm
Initial norm of residual.
Definition ComMod.h:1165
consts::LinearAlgebraType linear_algebra_assembly_type
The type of assembly interface to a numerical linear algebra library.
Definition ComMod.h:1187
consts::LinearAlgebraType linear_algebra_type
The type of interface to a numerical linear algebra library.
Definition ComMod.h:1184
int nOutURIS
URIS: Number of possible outputs.
Definition ComMod.h:1126
std::vector< bfType > bf
Body force associated with this equation.
Definition ComMod.h:1223
double pNorm
First iteration norm.
Definition ComMod.h:1168
double af
Definition ComMod.h:1149
int nBf
Number of BFs.
Definition ComMod.h:1141
int nDmn
Number of domains.
Definition ComMod.h:1129
int nOutput
Number of possible outputs.
Definition ComMod.h:1120
std::vector< dmnType > dmnIB
IB: immersed domains that this equation must be solved.
Definition ComMod.h:1208
std::vector< bcType > bc
BCs associated with this equation;.
Definition ComMod.h:1199
std::vector< bcType > bcIB
IB: BCs associated with this equation on immersed surfaces.
Definition ComMod.h:1202
int dof
Degrees of freedom.
Definition ComMod.h:1102
fsi_linear_solver::FSILS_lsType FSILS
FSILS type of linear solver.
Definition ComMod.h:1196
consts::EquationType phys
Type of equation fluid/heatF/heatS/lElas/FSI.
Definition ComMod.h:1144
std::vector< outputType > output
Outputs.
Definition ComMod.h:1211
double beta
Definition ComMod.h:1159
int minItr
Minimum iteration for this eq.
Definition ComMod.h:1117
The face type containing mesh at boundary.
Definition ComMod.h:524
void destroy()
Free memory and reset some data members.
Definition ComMod.cpp:122
Fourier coefficients that are used to specify unsteady BCs.
Definition ComMod.h:49
Definition ComMod.h:317
Fluid viscosity model type.
Definition ComMod.h:396
Function spaces (basis) type.
Definition ComMod.h:239
void destroy()
SUBROUTINE DESTROYFS(fs)
Definition ComMod.cpp:159
Definition ComMod.h:1308
Vector< int > nG
Num traces (Gauss points) local to each process.
Definition ComMod.h:1317
Vector< int > n
Num traces (nodes) local to each process.
Definition ComMod.h:1311
Vector< int > gE
Pointer to global trace (Gauss point) stacked contiguously.
Definition ComMod.h:1320
Vector< int > gN
Pointer to global trace (node num) stacked contiguously.
Definition ComMod.h:1314
Immersed Boundary (IB) data type.
Definition ComMod.h:1327
Array< double > x
IB position coordinates.
Definition ComMod.h:1371
Array< double > Aun
Time derivative of displacement (new)
Definition ComMod.h:1380
int cpld
IB coupling.
Definition ComMod.h:1339
Array< double > Ku
LHS tangent matrix for displacement.
Definition ComMod.h:1410
int tnNo
Total number of IB nodes.
Definition ComMod.h:1353
Array< double > Un
Displacement (projected on background mesh, new, n+af)
Definition ComMod.h:1398
int cEq
Current equation.
Definition ComMod.h:1350
Array< double > R
Residual (FSI force)
Definition ComMod.h:1401
int intrp
IB interpolation method.
Definition ComMod.h:1343
Array< double > Uo
Displacement (projected on background mesh, old)
Definition ComMod.h:1395
Array< double > Yb
Velocity (new)
Definition ComMod.h:1374
Array< double > Ubn
Displacement (new)
Definition ComMod.h:1389
int cDmn
Current IB domain ID.
Definition ComMod.h:1347
double callD[4]
IB call duration (1: total time; 2: update; 3,4: communication)
Definition ComMod.h:1359
ibCommType cm
IB communicator.
Definition ComMod.h:1416
Vector< int > rowPtr
Row pointer (for sparse LHS matrix storage)
Definition ComMod.h:1365
Array< double > Rub
Residual (displacement, IB mesh)
Definition ComMod.h:1407
bool savedOnce
Whether any file being saved.
Definition ComMod.h:1331
Vector< int > dmnID
IB Domain ID.
Definition ComMod.h:1362
Array< double > Auo
Time derivative of displacement (old)
Definition ComMod.h:1377
Array< double > Ubk
Displacement (n+af)
Definition ComMod.h:1392
int nMsh
Number of IB meshes.
Definition ComMod.h:1356
int mthd
IB method.
Definition ComMod.h:1335
std::vector< mshType > msh
DERIVED class VARIABLES IB meshes;.
Definition ComMod.h:1413
Array< double > Ubo
Displacement (old)
Definition ComMod.h:1386
Vector< int > colPtr
Column pointer (for sparse LHS matrix storage)
Definition ComMod.h:1368
Array< double > Ru
Residual (displacement, background mesh)
Definition ComMod.h:1404
Array< double > Auk
Time derivative of displacement (n+am)
Definition ComMod.h:1383
Only to group four channels, in case I rather have them as one variable.
Definition ChnlMod.h:50
Linear system of equations solver type.
Definition ComMod.h:665
double absTol
Absolute tolerance (IN)
Definition ComMod.h:696
int cN
Number of |x| norms (OUT)
Definition ComMod.h:687
int cD
Number of <x.y> dot products (OUT)
Definition ComMod.h:690
double fNorm
Final norm of residual (OUT)
Definition ComMod.h:705
double callD
Calling duration (OUT)
Definition ComMod.h:711
int reserve
Only for data alignment (-)
Definition ComMod.h:693
bool suc
Successful solving (OUT)
Definition ComMod.h:672
int mItr
Maximum iterations (IN)
Definition ComMod.h:675
consts::SolverType LS_type
LS solver (IN)
Definition ComMod.h:669
int itr
Number of iteration (OUT)
Definition ComMod.h:681
double relTol
Relative tolerance (IN)
Definition ComMod.h:699
double dB
Res. rduction in last itr. (OUT)
Definition ComMod.h:708
int sD
Space dimension (IN)
Definition ComMod.h:678
int cM
Number of Ax multiple (OUT)
Definition ComMod.h:684
double iNorm
Initial norm of residual (OUT)
Definition ComMod.h:702
This is the container for a mesh or NURBS patch, those specific to NURBS are noted.
Definition ComMod.h:877
int nNo
Number of nodes (control points) for 2D elements?
Definition ComMod.h:938
Vector< double > w
Gauss weights.
Definition ComMod.h:1007
std::vector< std::vector< int > > ordering
@breif ordering: node ordering for boundaries
Definition ComMod.h:965
Array< double > N
Parent shape function.
Definition ComMod.h:1019
traceType trc
IB: tracers.
Definition ComMod.h:1062
Array3< double > Ys
Solution field (displacement, velocity, pressure, etc.) for a known, potentially time-varying,...
Definition ComMod.h:1041
Vector< int > eDist
Element distribution between processors.
Definition ComMod.h:968
Vector< int > iGC
IB: Whether a cell is a ghost cell or not.
Definition ComMod.h:1001
adjType nAdj
Mesh nodal adjacency.
Definition ComMod.h:1047
Array< double > xib
Bounds on parameteric coordinates.
Definition ComMod.h:1013
adjType eAdj
Mesh element adjacency.
Definition ComMod.h:1050
int nG
Number of Gauss points for integration.
Definition ComMod.h:935
int nFa
Number of faces.
Definition ComMod.h:929
Array< double > x
Position coordinates (not always, however, as they get overwritten by read_vtu_pdata())
Definition ComMod.h:1016
std::vector< fsType > fs
Function spaces (basis)
Definition ComMod.h:1053
Array3< double > Nxx
Second derivatives of shape functions - used for shells & IGA davep double Nxx(:,:,...
Definition ComMod.h:1037
int gnNo
Global number of nodes (control points) on a single mesh.
Definition ComMod.h:920
double dx
IB: Mesh size parameter.
Definition ComMod.h:953
bool lShpF
Whether the shape function is linear.
Definition ComMod.h:901
Vector< int > lN
Global to local maping tnNo --> nNo.
Definition ComMod.h:992
Vector< int > otnIEN
gIEN mapper from old to new
Definition ComMod.h:986
int nFn
Number of fiber directions.
Definition ComMod.h:947
Vector< int > eRIS
RIS: flags of whether elemets are adjacent to RIS projections.
Definition ComMod.h:1066
Array< int > eIEN
Shells: extended IEN array with neighboring nodes.
Definition ComMod.h:995
Vector< int > gN
Global nodes maping nNo --> tnNo.
Definition ComMod.h:974
bool lFib
Whether the mesh is fibers (Purkinje)
Definition ComMod.h:907
double v
The volume of this mesh.
Definition ComMod.h:962
int eNoN
Number of nodes (control points) in a single element.
Definition ComMod.h:914
double scF
Mesh scale factor.
Definition ComMod.h:950
Vector< int > eId
Element domain ID number.
Definition ComMod.h:971
int gnEl
Global number of elements (knot spans)
Definition ComMod.h:917
double res
RIS resistance value.
Definition ComMod.h:956
Vector< int > partRIS
RIS: processor ids to change element partitions to.
Definition ComMod.h:1069
int nSl
Number of elements sample points to be outputs (NURBS)
Definition ComMod.h:941
Array< double > xi
Gauss integration points in parametric space.
Definition ComMod.h:1010
Array< double > fN
Fiber orientations stored at the element level - used for electrophysiology and solid mechanics.
Definition ComMod.h:1029
int nFs
Number of function spaces.
Definition ComMod.h:932
Array< int > sbc
Shells: boundary condition variable.
Definition ComMod.h:998
bool lShl
Whether the mesh is shell.
Definition ComMod.h:904
Array< double > Nb
Shape function bounds.
Definition ComMod.h:1022
Array< double > nV
Normal vector to each nodal point (for Shells)
Definition ComMod.h:1025
Vector< double > nW
Control points weights (NURBS)
Definition ComMod.h:1004
Array3< double > Nx
Parent shape functions gradient double Nx(:,:,:)
Definition ComMod.h:1033
std::vector< faceType > fa
Faces are stored in this variable.
Definition ComMod.h:1059
Vector< int > gpN
GLobal projected nodes mapping projected -> unprojected mapping.
Definition ComMod.h:977
Array< int > gIEN
Global connectivity array mappig eNoN,nEl --> gnNo.
Definition ComMod.h:980
int vtkType
The element type recognized by VTK format.
Definition ComMod.h:944
int nEl
Number of elements (knot spans)
Definition ComMod.h:926
consts::ElementType eType
Element type.
Definition ComMod.h:910
int nEf
Number of element face. Used for reading Gambit mesh files.
Definition ComMod.h:923
std::string name
Mesh Name.
Definition ComMod.h:1044
std::vector< bsType > bs
BSpline in different directions (NURBS)
Definition ComMod.h:1056
double tol
RIS projection tolerance.
Definition ComMod.h:959
Array< int > IEN
The connectivity array mapping eNoN,nEl --> nNo.
Definition ComMod.h:983
double qmTET4
TET4 quadrature modifier.
Definition ComMod.h:1072
Array< int > INN
Local knot pointer (NURBS)
Definition ComMod.h:989
Declared type for outputed variables.
Definition ComMod.h:643
Definition ComMod.h:107
Data type for Resistive Immersed Surface.
Definition ComMod.h:1422
Array3< int > lst
List of meshes, and faces connected. The first face is the.
Definition ComMod.h:1433
std::vector< bool > status
Status RIS interface.
Definition ComMod.h:1448
Vector< double > Res
Resistance value.
Definition ComMod.h:1436
Vector< int > nbrIter
Count time steps where no check is needed.
Definition ComMod.h:1429
Array< double > meanP
Mean distal and proximal pressure (1: distal, 2: proximal)
Definition ComMod.h:1442
int nbrRIS
Number of RIS surface.
Definition ComMod.h:1426
Vector< double > meanFl
Mean flux on the RIS surface.
Definition ComMod.h:1445
std::vector< bool > clsFlg
Flag closed surface active, the valve is considerd open initially.
Definition ComMod.h:1439
Definition ComMod.h:1259
Vector< double > iNorm
Initial norm of an equation.
Definition ComMod.h:1296
int rTS
Time step from which remeshing is done.
Definition ComMod.h:1274
int freq
Time step frequency for forced remeshing.
Definition ComMod.h:1283
int cpVar
Time step freq for saving data.
Definition ComMod.h:1277
Array< double > A0
Copy of solution variables where remeshing starts.
Definition ComMod.h:1299
int cntr
Counter to track number of remesh done.
Definition ComMod.h:1271
std::vector< bool > flag
Flag is set if remeshing is required for each mesh.
Definition ComMod.h:1304
double time
Time where remeshing starts.
Definition ComMod.h:1286
consts::MeshGeneratorType method
Method for remeshing: 1-TetGen, 2-MeshSim.
Definition ComMod.h:1268
double minDihedAng
Mesh quality parameters.
Definition ComMod.h:1289
int fTS
Time step at which forced remeshing is done.
Definition ComMod.h:1280
Vector< double > maxEdgeSize
Edge size of mesh.
Definition ComMod.h:1293
bool isReqd
Whether remesh is required for problem or not.
Definition ComMod.h:1265
Fluid viscosity model type.
Definition ComMod.h:421
Structural domain type.
Definition ComMod.h:343
Definition Parameters.h:662
Definition ComMod.h:783
Tracer type used for immersed boundaries. Identifies traces of nodes and integration points on backgr...
Definition ComMod.h:489
Unfitted Resistive Immersed surface data type.
Definition ComMod.h:1454
TODO: for now, better to organize these within a class
Definition ComMod.h:1781
Store options for output types.
Definition ComMod.h:619