Changeset 465
- Timestamp:
- 05/18/09 09:43:19 (16 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 4 added
- 3 deleted
- 97 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/DataSet/DataSet.cpp
r444 r465 900 900 #undef __FUNCT__ 901 901 #define __FUNCT__ "DataSet::CreateKMatrix" 902 void DataSet::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){902 void DataSet::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 903 903 904 904 vector<Object*>::iterator object; … … 911 911 912 912 element=(Element*)(*object); 913 element->CreateKMatrix(Kgg,inputs,analysis_type );913 element->CreateKMatrix(Kgg,inputs,analysis_type,sub_analysis_type); 914 914 } 915 915 if(EnumIsLoad((*object)->Enum())){ 916 916 917 917 load=(Load*)(*object); 918 load->CreateKMatrix(Kgg,inputs,analysis_type );918 load->CreateKMatrix(Kgg,inputs,analysis_type,sub_analysis_type); 919 919 } 920 920 } … … 924 924 #undef __FUNCT__ 925 925 #define __FUNCT__ "DataSet::CreatePVector" 926 void DataSet::CreatePVector(Vec pg,void* inputs,int analysis_type ){926 void DataSet::CreatePVector(Vec pg,void* inputs,int analysis_type,int sub_analysis_type){ 927 927 928 928 vector<Object*>::iterator object; … … 935 935 936 936 element=(Element*)(*object); 937 element->CreatePVector(pg,inputs,analysis_type );937 element->CreatePVector(pg,inputs,analysis_type,sub_analysis_type); 938 938 } 939 939 if(EnumIsLoad((*object)->Enum())){ 940 940 941 941 load=(Load*)(*object); 942 load->CreatePVector(pg,inputs,analysis_type );942 load->CreatePVector(pg,inputs,analysis_type,sub_analysis_type); 943 943 } 944 944 } … … 984 984 #undef __FUNCT__ 985 985 #define __FUNCT__ "DataSet::PenaltyCreateKMatrix" 986 void DataSet::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type ){986 void DataSet::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){ 987 987 988 988 vector<Object*>::iterator object; … … 994 994 995 995 load=(Load*)(*object); 996 load->PenaltyCreateKMatrix(Kgg,inputs,kmax,analysis_type );996 load->PenaltyCreateKMatrix(Kgg,inputs,kmax,analysis_type,sub_analysis_type); 997 997 } 998 998 } … … 1002 1002 #undef __FUNCT__ 1003 1003 #define __FUNCT__ "DataSet::PenaltyCreatePVector" 1004 void DataSet::PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type ){1004 void DataSet::PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){ 1005 1005 1006 1006 vector<Object*>::iterator object; … … 1012 1012 1013 1013 load=(Load*)(*object); 1014 load->PenaltyCreatePVector(pg,inputs,kmax,analysis_type );1014 load->PenaltyCreatePVector(pg,inputs,kmax,analysis_type,sub_analysis_type); 1015 1015 } 1016 1016 } … … 1028 1028 #undef __FUNCT__ 1029 1029 #define __FUNCT__ "RiftConstraints" 1030 void DataSet::RiftConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type ){1030 void DataSet::RiftConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type){ 1031 1031 1032 1032 throw ErrorException(__FUNCT__," not implemented yet!"); … … 1045 1045 #undef __FUNCT__ 1046 1046 #define __FUNCT__ "MeltingConstraints" 1047 void DataSet::MeltingConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type ){1047 void DataSet::MeltingConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type){ 1048 1048 1049 1049 throw ErrorException(__FUNCT__," not implemented yet!"); … … 1084 1084 1085 1085 1086 void DataSet::Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type ){1086 void DataSet::Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){ 1087 1087 1088 1088 … … 1095 1095 1096 1096 element=(Element*)(*object); 1097 element->Du(du_g,u_g,u_g_obs,inputs,analysis_type );1098 } 1099 } 1100 1101 1102 } 1103 1104 void DataSet::Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type, char* control_type){1097 element->Du(du_g,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type); 1098 } 1099 } 1100 1101 1102 } 1103 1104 void DataSet::Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 1105 1105 1106 1106 … … 1113 1113 1114 1114 element=(Element*)(*object); 1115 element->Gradj(grad_g,u_g,lambda_g,inputs,analysis_type, control_type);1115 element->Gradj(grad_g,u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type); 1116 1116 } 1117 1117 } … … 1120 1120 } 1121 1121 1122 void DataSet::Misfit(double* pJ, double* u_g,double* u_g_obs,void* inputs,int analysis_type ){1122 void DataSet::Misfit(double* pJ, double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){ 1123 1123 1124 1124 double J=0;; … … 1132 1132 1133 1133 element=(Element*)(*object); 1134 J+=element->Misfit(u_g,u_g_obs,inputs,analysis_type );1134 J+=element->Misfit(u_g,u_g_obs,inputs,analysis_type,sub_analysis_type); 1135 1135 1136 1136 } -
issm/trunk/src/c/DataSet/DataSet.h
r358 r465 47 47 void DistributeDofs(int numberofnodes,int numdofspernode); 48 48 void CreatePartitioningVector(Vec* ppartition,int numnods,int numdofspernode); 49 void DistributeNumDofs(int** pnumdofspernode,int numberofnodes,int analysis_type );49 void DistributeNumDofs(int** pnumdofspernode,int numberofnodes,int analysis_type,int sub_analysis_type); 50 50 void FlagClones(int numberofnodes); 51 51 int NumberOfDofs(); … … 61 61 void SetSorting(int* in_sorted_ids,int* in_id_offsets); 62 62 void Sort(); 63 void CreateKMatrix(Mat Kgg,void* inputs, int analysis_type );64 void CreatePVector(Vec pg,void* inputs, int analysis_type );63 void CreateKMatrix(Mat Kgg,void* inputs, int analysis_type,int sub_analysis_type); 64 void CreatePVector(Vec pg,void* inputs, int analysis_type,int sub_analysis_type); 65 65 void UpdateFromInputs(void* inputs); 66 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type );67 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type );66 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 67 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 68 68 int RiftIsPresent(); 69 void RiftConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type );69 void RiftConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type); 70 70 int MeltingIsPresent(); 71 void MeltingConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type );71 void MeltingConstraints(int* pnum_unstable_constraints,void* inputs,int analysis_type,int sub_analysis_type); 72 72 DataSet* Copy(void); 73 void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type );74 void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type, char* control_type);75 void Misfit(double* pJ, double* u_g,double* u_g_obs,void* inputs,int analysis_type );73 void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type); 74 void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type); 75 void Misfit(double* pJ, double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type); 76 76 void VelocityExtrude(Vec ug,double* ug_serial); 77 77 void SlopeExtrude(Vec sg,double* sg_serial); -
issm/trunk/src/c/Dux/Dux.cpp
r1 r465 14 14 15 15 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type ){16 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 17 17 18 18 int i; … … 33 33 34 34 /*Compute velocity difference: */ 35 elements->Du(du_g, u_g,u_g_obs,inputs,analysis_type );35 elements->Du(du_g, u_g,u_g_obs,inputs,analysis_type,sub_analysis_type); 36 36 37 37 /*Assemble vector: */ -
issm/trunk/src/c/Dux/Dux.h
r1 r465 10 10 /* local prototypes: */ 11 11 void Dux( Vec* pdu_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type );12 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 13 13 14 14 #endif /* _DUX_H */ -
issm/trunk/src/c/EnumDefinitions/AnalysisTypeAsEnum.cpp
r358 r465 15 15 } 16 16 17 if (strcmp(analysis_type,"control")==0){ 17 if (strcmp(analysis_type,"diagnostic")==0){ 18 return DiagnosticAnalysisEnum(); 19 } 20 else if (strcmp(analysis_type,"control")==0){ 18 21 return ControlAnalysisEnum(); 19 22 } 20 else if (strcmp(analysis_type,"diagnostic_horiz")==0){ 21 return DiagnosticHorizAnalysisEnum(); 22 } 23 else if (strcmp(analysis_type,"diagnostic_vert")==0){ 24 return DiagnosticVertAnalysisEnum(); 23 else if (strcmp(analysis_type,"thermal")==0){ 24 return ThermalAnalysisEnum(); 25 25 } 26 26 else if (strcmp(analysis_type,"prognostic")==0){ 27 27 return PrognosticAnalysisEnum(); 28 28 } 29 else if (strcmp(analysis_type,"thermalsteady")==0){30 return ThermalSteadyAnalysisEnum();31 }32 else if (strcmp(analysis_type,"thermaltransient")==0){33 return ThermalTransientAnalysisEnum();34 }35 29 else if (strcmp(analysis_type,"melting")==0){ 36 30 return MeltingAnalysisEnum(); 37 }38 else if (strcmp(analysis_type,"diagnostic_stokes")==0){39 return DiagnosticStokesAnalysisEnum();40 }41 else if (strcmp(analysis_type,"diagnostic_hutter")==0){42 return DiagnosticHutterAnalysisEnum();43 31 } 44 32 else if (strcmp(analysis_type,"slope_compute")==0){ 45 33 return SlopeComputeAnalysisEnum(); 46 34 } 47 else if (strcmp(analysis_type,"s urface_slope_compute_x")==0){48 return S urfaceSlopeComputeXAnalysisEnum();35 else if (strcmp(analysis_type,"stokes")==0){ 36 return StokesAnalysisEnum(); 49 37 } 50 else if (strcmp(analysis_type," surface_slope_compute_y")==0){51 return SurfaceSlopeComputeYAnalysisEnum();38 else if (strcmp(analysis_type,"hutter")==0){ 39 return HutterAnalysisEnum(); 52 40 } 53 else if (strcmp(analysis_type," bed_slope_compute_x")==0){54 return BedSlopeComputeXAnalysisEnum();41 else if (strcmp(analysis_type,"surfacex")==0){ 42 return SurfaceXAnalysisEnum(); 55 43 } 56 else if (strcmp(analysis_type," bed_slope_compute_y")==0){57 return BedSlopeComputeYAnalysisEnum();44 else if (strcmp(analysis_type,"surfacey")==0){ 45 return SurfaceYAnalysisEnum(); 58 46 } 59 else throw ErrorException(__FUNCT__," could not recognized analysis type!"); 47 else if (strcmp(analysis_type,"bedx")==0){ 48 return BedXAnalysisEnum(); 49 } 50 else if (strcmp(analysis_type,"bedy")==0){ 51 return BedYAnalysisEnum(); 52 } 53 else if (strcmp(analysis_type,"horiz")==0){ 54 return HorizAnalysisEnum(); 55 } 56 else if (strcmp(analysis_type,"vert")==0){ 57 return VertAnalysisEnum(); 58 } 59 else if (strcmp(analysis_type,"")==0){ 60 return NoneAnalysisEnum(); 61 } 62 else throw ErrorException(__FUNCT__,exprintf("%s%s"," could not recognize analysis type: ",analysis_type)); 60 63 61 64 } -
issm/trunk/src/c/EnumDefinitions/EnumDefinitions.cpp
r387 r465 15 15 16 16 /*analysis types: */ 17 int StructuralAnalysisEnum(void){ return 20; } 18 int ThermalAnalysisEnum(void){ return 21; } 19 int ControlAnalysisEnum(void){ return 22; } 20 int DiagnosticHorizAnalysisEnum(void){ return 23; } 21 int DiagnosticVertAnalysisEnum(void){ return 24; } 22 int PrognosticAnalysisEnum(void){ return 26; } 23 int ThermalSteadyAnalysisEnum(void) { return 27; } 24 int ThermalTransientAnalysisEnum(void){ return 28; } 25 int MeltingAnalysisEnum(void){ return 29; } 26 int DiagnosticStokesAnalysisEnum(void){ return 30; } 27 int DiagnosticHutterAnalysisEnum(void){ return 31; } 28 int SlopeComputeAnalysisEnum(void){ return 32; } 29 int SurfaceSlopeComputeXAnalysisEnum(void){ return 33; } 30 int SurfaceSlopeComputeYAnalysisEnum(void){ return 34; } 31 int BedSlopeComputeXAnalysisEnum(void){ return 35; } 32 int BedSlopeComputeYAnalysisEnum(void){ return 36; } 17 int DiagnosticAnalysisEnum(void){ return 20; } 18 int ControlAnalysisEnum(void){ return 21; } 19 int ThermalAnalysisEnum(void){ return 22; } 20 int PrognosticAnalysisEnum(void){ return 23; } 21 int MeltingAnalysisEnum(void){ return 24; } 22 int SlopeComputeAnalysisEnum(void){ return 25; } 23 int StokesAnalysisEnum(void){ return 26; } 24 int HutterAnalysisEnum(void){ return 27; } 25 int SurfaceXAnalysisEnum(void){ return 28; } 26 int SurfaceYAnalysisEnum(void){ return 29; } 27 int BedXAnalysisEnum(void){ return 30; } 28 int BedYAnalysisEnum(void){ return 31; } 29 int HorizAnalysisEnum(void){ return 32; } 30 int VertAnalysisEnum(void){ return 33; } 31 int NoneAnalysisEnum(void){ return 34; } 33 32 34 33 /*datasets: */ -
issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h
r387 r465 34 34 35 35 /* analysis enums: */ 36 int DiagnosticAnalysisEnum(void); 36 37 int ControlAnalysisEnum(void); 37 int DiagnosticHorizAnalysisEnum(void); 38 int DiagnosticVertAnalysisEnum(void); 38 int ThermalAnalysisEnum(void); 39 39 int PrognosticAnalysisEnum(void); 40 int ThermalSteadyAnalysisEnum(void);41 int ThermalTransientAnalysisEnum(void);42 40 int MeltingAnalysisEnum(void); 43 int DiagnosticStokesAnalysisEnum(void);44 int DiagnosticHutterAnalysisEnum(void);45 41 int SlopeComputeAnalysisEnum(void); 46 int SurfaceSlopeComputeXAnalysisEnum(void); 47 int SurfaceSlopeComputeYAnalysisEnum(void); 48 int BedSlopeComputeXAnalysisEnum(void); 49 int BedSlopeComputeYAnalysisEnum(void); 42 int StokesAnalysisEnum(void); 43 int HutterAnalysisEnum(void); 44 int SurfaceXAnalysisEnum(void); 45 int SurfaceYAnalysisEnum(void); 46 int BedXAnalysisEnum(void); 47 int BedYAnalysisEnum(void); 48 int HorizAnalysisEnum(void); 49 int VertAnalysisEnum(void); 50 int NoneAnalysisEnum(void); 50 51 51 52 -
issm/trunk/src/c/Gradjx/Gradjx.cpp
r1 r465 14 14 15 15 void Gradjx( Vec* pgrad_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g, double* lambda_g, ParameterInputs* inputs,int analysis_type, char* control_type){16 double* u_g, double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 17 17 18 18 int i; … … 33 33 34 34 /*Compute gradients: */ 35 elements->Gradj(grad_g, u_g,lambda_g,inputs,analysis_type, control_type);35 elements->Gradj(grad_g, u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type); 36 36 37 37 /*Assemble vector: */ -
issm/trunk/src/c/Gradjx/Gradjx.h
r1 r465 10 10 /* local prototypes: */ 11 11 void Gradjx( Vec* pgrad_g, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g, double* lambda_g, ParameterInputs* inputs,int analysis_type, char* control_type);12 double* u_g, double* lambda_g, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type); 13 13 14 14 #endif /* _GRADJX_H */ -
issm/trunk/src/c/Makefile.am
r434 r465 79 79 ./shared/Dofs/dofs.h\ 80 80 ./shared/Dofs/dofsetgen.cpp\ 81 ./shared/Dofs/DistributeNumDofs.cpp\ 81 82 ./shared/Numerics/numerics.h\ 82 83 ./shared/Numerics/GaussPoints.h\ … … 86 87 ./shared/Numerics/BrentSearch.cpp\ 87 88 ./shared/Numerics/OptFunc.cpp\ 88 ./shared/Numerics/extrema.cpp\89 ./shared/Numerics/DistributeNumDofs.cpp\90 ./shared/Exceptions/exceptions.h\91 ./shared/Exceptions/Exceptions.cpp\92 ./shared/Exceptions/exprintf.cpp\93 ./shared/Exp/exp.h\94 ./shared/Exp/IsInPoly.cpp\95 ./shared/Exp/IsInPolySerial.cpp\96 ./shared/Exp/DomainOutlineRead.cpp\97 ./shared/TriMesh/trimesh.h\98 ./shared/TriMesh/AssociateSegmentToElement.cpp\99 ./shared/TriMesh/GridInsideHole.cpp\100 ./shared/TriMesh/OrderSegments.cpp\101 ./shared/TriMesh/SplitMeshForRifts.cpp\102 ./shared/TriMesh/TriMeshUtils.cpp\103 ./shared/Sorting/binary_search.cpp\104 ./shared/Sorting/sorting.h\105 ./shared/Elements/elements.h\106 ./shared/Elements/ResolvePointers.cpp\107 ./shared/Elements/Paterson.cpp\108 ./shared/Elements/GetElementNodeData.cpp\109 ./toolkits/petsc\110 ./toolkits/petsc/patches\111 ./toolkits/petsc/patches/petscpatches.h\112 ./toolkits/petsc/patches/MatlabMatrixToPetscMatrix.cpp\113 ./toolkits/petsc/patches/MatlabVectorToPetscVector.cpp\114 ./toolkits/petsc/patches/PetscMatrixToMatlabMatrix.cpp\115 ./toolkits/petsc/patches/PetscVectorToMatlabVector.cpp\116 ./toolkits/petsc/patches/MatlabMatrixToDoubleMatrix.cpp\117 ./toolkits/petsc/patches/MatlabVectorToDoubleVector.cpp\118 ./toolkits/petsc/patches/PetscDetermineLocalSize.cpp\119 ./toolkits/petsc/patches/VecTranspose.cpp\120 ./toolkits/petsc/patches/VecToMPISerial.cpp\121 ./toolkits/petsc/patches/MatToSerial.cpp\122 ./toolkits/petsc/patches/VecMerge.cpp\123 ./toolkits/petsc/patches/NewVec.cpp\124 ./toolkits/petsc/patches/NewVecFromLocalSize.cpp\125 ./toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp\126 ./toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp\127 ./toolkits/petsc/patches/NewMat.cpp\128 ./toolkits/petsc/patches/VecFree.cpp\129 ./toolkits/petsc/patches/VecDuplicatePatch.cpp\130 ./toolkits/petsc/patches/KSPFree.cpp\131 ./toolkits/petsc/patches/ISFree.cpp\132 ./toolkits/petsc/patches/MatFree.cpp\133 ./toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp\134 ./toolkits/petsc/patches/VecPartition.cpp\135 ./toolkits/petsc/patches/MatPartition.cpp\136 ./toolkits/petsc/patches/MatInvert.cpp\137 ./toolkits/petsc/patches/MatMultPatch.cpp\138 ./toolkits/petsc/petscincludes.h\139 ./toolkits/mpi/mpiincludes.h\140 ./toolkits/mpi/patches/mpipatches.h\141 ./toolkits/mpi/patches/MPI_Upperrow.cpp\142 ./toolkits/mpi/patches/MPI_Lowerrow.cpp\143 ./toolkits/mpi/patches/MPI_Boundariesfromrange.cpp\144 ./toolkits/metis/metisincludes.h\145 ./toolkits/triangle/triangleincludes.h\146 ./toolkits.h\147 ./io/io.h\148 ./io/FetchData.cpp\149 ./io/WriteData.cpp\150 ./io/WriteDataToDisk.cpp\151 ./io/SerialFetchData.cpp\152 ./io/SerialWriteData.cpp\153 ./io/ParallelFetchData.cpp\154 ./io/ParallelFetchInteger.cpp\155 ./io/ParallelFetchMat.cpp\156 ./io/ParallelFetchScalar.cpp\157 ./io/ParallelFetchString.cpp\158 ./io/ModelFetchData.cpp\159 ./io/WriteNodeSets.cpp\160 ./io/WriteParams.cpp\161 ./io/FetchNodeSets.cpp\162 ./io/FetchRifts.cpp\163 ./io/ParameterInputsInit.cpp\164 ./EnumDefinitions/EnumDefinitions.h\165 ./EnumDefinitions/EnumDefinitions.cpp\166 ./EnumDefinitions/AnalysisTypeAsEnum.cpp\167 ./ModelProcessorx/Model.h\168 ./ModelProcessorx/Model.cpp\169 ./ModelProcessorx/CreateElementsNodesAndMaterials.cpp\170 ./ModelProcessorx/CreateConstraints.cpp \171 ./ModelProcessorx/CreateLoads.cpp\172 ./ModelProcessorx/CreateParameters.cpp\173 ./ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp\174 ./ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp \175 ./ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\176 ./ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp\177 ./ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp\178 ./ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp \179 ./ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp\180 ./ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp\181 ./ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp \182 ./ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp\183 ./ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp\184 ./ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp \185 ./ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp\186 ./ModelProcessorx/SlopeCompute/CreateElementsNodesAndMaterialsSlopeCompute.cpp\187 ./ModelProcessorx/SlopeCompute/CreateConstraintsSlopeCompute.cpp \188 ./ModelProcessorx/SlopeCompute/CreateLoadsSlopeCompute.cpp\189 ./ModelProcessorx/Control/CreateParametersControl.cpp\190 ./Dofx/Dofx.h\191 ./Dofx/Dofx.cpp\192 ./Dux/Dux.h\193 ./Dux/Dux.cpp\194 ./GriddataMeshToGridx/GriddataMeshToGridx.h\195 ./GriddataMeshToGridx/GriddataMeshToGridx.cpp\196 ./ControlConstrainx/ControlConstrainx.h\197 ./ControlConstrainx/ControlConstrainx.cpp\198 ./Misfitx/Misfitx.h\199 ./Misfitx/Misfitx.cpp\200 ./Orthx/Orthx.h\201 ./Orthx/Orthx.cpp\202 ./Gradjx/Gradjx.h\203 ./Gradjx/Gradjx.cpp\204 ./UpdateFromInputsx/UpdateFromInputsx.h\205 ./UpdateFromInputsx/UpdateFromInputsx.cpp\206 ./ConfigureObjectsx/ConfigureObjectsx.h\207 ./ConfigureObjectsx/ConfigureObjectsx.cpp\208 ./ComputePressurex/ComputePressurex.h\209 ./ComputePressurex/ComputePressurex.cpp\210 ./BuildNodeSetsx/BuildNodeSetsx.h\211 ./BuildNodeSetsx/BuildNodeSetsx.cpp\212 ./BuildNodeSetsx/PartitionSets.cpp\213 ./SpcNodesx/SpcNodesx.h\214 ./SpcNodesx/SpcNodesx.cpp\215 ./MpcNodesx/MpcNodesx.h\216 ./MpcNodesx/MpcNodesx.cpp\217 ./DataInterpx/DataInterpx.cpp\218 ./DataInterpx/DataInterpx.h\219 ./HoleFillerx/HoleFillerx.cpp\220 ./HoleFillerx/HoleFillerx.h\221 ./MeshPartitionx/MeshPartitionx.cpp\222 ./MeshPartitionx/MeshPartitionx.h\223 ./ContourToMeshx/ContourToMeshx.cpp\224 ./ContourToMeshx/ContourToMeshx.h\225 ./Reducevectorgtosx/Reducevectorgtosx.cpp\226 ./Reducevectorgtosx/Reducevectorgtosx.h\227 ./Reducematrixfromgtofx/Reducematrixfromgtofx.cpp\228 ./Reducematrixfromgtofx/Reducematrixfromgton.cpp\229 ./Reducematrixfromgtofx/Reducematrixfromgtofx.h\230 ./Reduceloadfromgtofx/Reduceloadfromgtofx.h\231 ./Reduceloadfromgtofx/Reduceloadfromgtofx.cpp\232 ./NormalizeConstraintsx/NormalizeConstraintsx.cpp\233 ./NormalizeConstraintsx/NormalizeConstraintsx.h\234 ./SystemMatricesx/SystemMatricesx.cpp\235 ./SystemMatricesx/SystemMatricesx.h\236 ./PenaltyConstraintsx/PenaltyConstraintsx.cpp\237 ./PenaltyConstraintsx/PenaltyConstraintsx.h\238 ./PenaltySystemMatricesx/PenaltySystemMatricesx.cpp\239 ./PenaltySystemMatricesx/PenaltySystemMatricesx.h\240 ./Solverx/Solverx.cpp\241 ./Solverx/Solverx.h\242 ./Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\243 ./Mergesolutionfromftogx/Mergesolutionfromftogx.h\244 ./ProcessParamsx/ProcessParamsx.cpp\245 ./ProcessParamsx/ProcessParamsx.h\246 ./VelocityExtrudex/VelocityExtrudex.cpp\247 ./VelocityExtrudex/VelocityExtrudex.h\248 ./SlopeExtrudex/SlopeExtrudex.cpp\249 ./SlopeExtrudex/SlopeExtrudex.h250 251 252 253 254 libISSM_a_CXXFLAGS = -fPIC -DMATLAB -D_SERIAL_ -ansi -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_255 if LARGEARRAYS256 libISSM_a_CXXFLAGS += -D__GCC4BUILD__257 else258 libISSM_a_CXXFLAGS += -DMX_COMPAT_32259 endif260 261 262 263 264 #Parallel compilation265 libpISSM_a_SOURCES = ./objects/objects.h\266 ./objects/Object.h\267 ./objects/Element.h\268 ./objects/Element.cpp\269 ./objects/Material.h\270 ./objects/Material.cpp\271 ./objects/Load.h\272 ./objects/Load.cpp\273 ./objects/SolverEnum.h\274 ./objects/Contour.h\275 ./objects/Contour.cpp\276 ./objects/OptArgs.h\277 ./objects/OptPars.h\278 ./objects/Friction.h\279 ./objects/Friction.cpp\280 ./objects/Node.h\281 ./objects/Node.cpp\282 ./objects/Tria.h\283 ./objects/Tria.cpp\284 ./objects/Sing.h\285 ./objects/Sing.cpp\286 ./objects/Beam.h\287 ./objects/Beam.cpp\288 ./objects/Penta.h\289 ./objects/Penta.cpp\290 ./objects/Matice.h\291 ./objects/Matice.cpp\292 ./objects/Matpar.h\293 ./objects/Matpar.cpp\294 ./objects/Input.h\295 ./objects/Input.cpp\296 ./objects/ParameterInputs.h\297 ./objects/ParameterInputs.cpp\298 ./objects/Spc.cpp\299 ./objects/Spc.h\300 ./objects/Rgb.cpp\301 ./objects/Rgb.h\302 ./objects/Penpair.cpp\303 ./objects/Penpair.h\304 ./objects/Pengrid.cpp\305 ./objects/Pengrid.h\306 ./objects/Icefront.cpp\307 ./objects/Icefront.h\308 ./objects/Param.cpp\309 ./objects/Param.h\310 ./objects/NodeSets.cpp\311 ./objects/NodeSets.h\312 ./DataSet/DataSet.cpp\313 ./DataSet/DataSet.h\314 ./shared/shared.h\315 ./shared/Alloc/alloc.h\316 ./shared/Alloc/alloc.cpp\317 ./shared/Matlab/matlabshared.h\318 ./shared/Matlab/PrintfFunction.cpp\319 ./shared/Matlab/ModuleBoot.cpp\320 ./shared/Matlab/mxGetAssignedField.cpp\321 ./shared/Matlab/mxGetField.cpp\322 ./shared/Matlab/CheckNumMatlabArguments.cpp\323 ./shared/Matrix/matrix.h\324 ./shared/Matrix/MatrixUtils.cpp\325 ./shared/Dofs/dofs.h\326 ./shared/Dofs/dofsetgen.cpp\327 ./shared/Numerics/numerics.h\328 ./shared/Numerics/GaussPoints.h\329 ./shared/Numerics/GaussPoints.cpp\330 ./shared/Numerics/cross.cpp\331 ./shared/Numerics/norm.cpp\332 ./shared/Numerics/BrentSearch.cpp\333 ./shared/Numerics/OptFunc.cpp\334 ./shared/Numerics/DistributeNumDofs.cpp\335 89 ./shared/Numerics/extrema.cpp\ 336 90 ./shared/Exceptions/exceptions.h\ … … 413 167 ./ModelProcessorx/Model.h\ 414 168 ./ModelProcessorx/Model.cpp\ 415 ./ModelProcessorx/CreateElementsNodesAndMaterials.cpp\ 416 ./ModelProcessorx/CreateConstraints.cpp \ 417 ./ModelProcessorx/CreateLoads.cpp\ 169 ./ModelProcessorx/CreateDataSets.cpp\ 170 ./ModelProcessorx/CreateParameters.cpp\ 171 ./ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp\ 172 ./ModelProcessorx/DiagnosticHoriz/CreateConstraintsDiagnosticHoriz.cpp \ 173 ./ModelProcessorx/DiagnosticHoriz/CreateLoadsDiagnosticHoriz.cpp\ 174 ./ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp\ 175 ./ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp\ 176 ./ModelProcessorx/DiagnosticVert/CreateConstraintsDiagnosticVert.cpp \ 177 ./ModelProcessorx/DiagnosticVert/CreateLoadsDiagnosticVert.cpp\ 178 ./ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp\ 179 ./ModelProcessorx/DiagnosticHutter/CreateConstraintsDiagnosticHutter.cpp \ 180 ./ModelProcessorx/DiagnosticHutter/CreateLoadsDiagnosticHutter.cpp\ 181 ./ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp\ 182 ./ModelProcessorx/DiagnosticStokes/CreateConstraintsDiagnosticStokes.cpp \ 183 ./ModelProcessorx/DiagnosticStokes/CreateLoadsDiagnosticStokes.cpp\ 184 ./ModelProcessorx/SlopeCompute/CreateElementsNodesAndMaterialsSlopeCompute.cpp\ 185 ./ModelProcessorx/SlopeCompute/CreateConstraintsSlopeCompute.cpp \ 186 ./ModelProcessorx/SlopeCompute/CreateLoadsSlopeCompute.cpp\ 187 ./ModelProcessorx/Control/CreateParametersControl.cpp\ 188 ./Dofx/Dofx.h\ 189 ./Dofx/Dofx.cpp\ 190 ./Dux/Dux.h\ 191 ./Dux/Dux.cpp\ 192 ./GriddataMeshToGridx/GriddataMeshToGridx.h\ 193 ./GriddataMeshToGridx/GriddataMeshToGridx.cpp\ 194 ./ControlConstrainx/ControlConstrainx.h\ 195 ./ControlConstrainx/ControlConstrainx.cpp\ 196 ./Misfitx/Misfitx.h\ 197 ./Misfitx/Misfitx.cpp\ 198 ./Orthx/Orthx.h\ 199 ./Orthx/Orthx.cpp\ 200 ./Gradjx/Gradjx.h\ 201 ./Gradjx/Gradjx.cpp\ 202 ./UpdateFromInputsx/UpdateFromInputsx.h\ 203 ./UpdateFromInputsx/UpdateFromInputsx.cpp\ 204 ./ConfigureObjectsx/ConfigureObjectsx.h\ 205 ./ConfigureObjectsx/ConfigureObjectsx.cpp\ 206 ./ComputePressurex/ComputePressurex.h\ 207 ./ComputePressurex/ComputePressurex.cpp\ 208 ./BuildNodeSetsx/BuildNodeSetsx.h\ 209 ./BuildNodeSetsx/BuildNodeSetsx.cpp\ 210 ./BuildNodeSetsx/PartitionSets.cpp\ 211 ./SpcNodesx/SpcNodesx.h\ 212 ./SpcNodesx/SpcNodesx.cpp\ 213 ./MpcNodesx/MpcNodesx.h\ 214 ./MpcNodesx/MpcNodesx.cpp\ 215 ./DataInterpx/DataInterpx.cpp\ 216 ./DataInterpx/DataInterpx.h\ 217 ./HoleFillerx/HoleFillerx.cpp\ 218 ./HoleFillerx/HoleFillerx.h\ 219 ./MeshPartitionx/MeshPartitionx.cpp\ 220 ./MeshPartitionx/MeshPartitionx.h\ 221 ./ContourToMeshx/ContourToMeshx.cpp\ 222 ./ContourToMeshx/ContourToMeshx.h\ 223 ./Reducevectorgtosx/Reducevectorgtosx.cpp\ 224 ./Reducevectorgtosx/Reducevectorgtosx.h\ 225 ./Reducematrixfromgtofx/Reducematrixfromgtofx.cpp\ 226 ./Reducematrixfromgtofx/Reducematrixfromgton.cpp\ 227 ./Reducematrixfromgtofx/Reducematrixfromgtofx.h\ 228 ./Reduceloadfromgtofx/Reduceloadfromgtofx.h\ 229 ./Reduceloadfromgtofx/Reduceloadfromgtofx.cpp\ 230 ./NormalizeConstraintsx/NormalizeConstraintsx.cpp\ 231 ./NormalizeConstraintsx/NormalizeConstraintsx.h\ 232 ./SystemMatricesx/SystemMatricesx.cpp\ 233 ./SystemMatricesx/SystemMatricesx.h\ 234 ./PenaltyConstraintsx/PenaltyConstraintsx.cpp\ 235 ./PenaltyConstraintsx/PenaltyConstraintsx.h\ 236 ./PenaltySystemMatricesx/PenaltySystemMatricesx.cpp\ 237 ./PenaltySystemMatricesx/PenaltySystemMatricesx.h\ 238 ./Solverx/Solverx.cpp\ 239 ./Solverx/Solverx.h\ 240 ./Mergesolutionfromftogx/Mergesolutionfromftogx.cpp\ 241 ./Mergesolutionfromftogx/Mergesolutionfromftogx.h\ 242 ./ProcessParamsx/ProcessParamsx.cpp\ 243 ./ProcessParamsx/ProcessParamsx.h\ 244 ./VelocityExtrudex/VelocityExtrudex.cpp\ 245 ./VelocityExtrudex/VelocityExtrudex.h\ 246 ./SlopeExtrudex/SlopeExtrudex.cpp\ 247 ./SlopeExtrudex/SlopeExtrudex.h 248 249 250 251 252 libISSM_a_CXXFLAGS = -fPIC -DMATLAB -D_SERIAL_ -ansi -D_GNU_SOURCE -fno-omit-frame-pointer -pthread -D_CPP_ 253 if LARGEARRAYS 254 libISSM_a_CXXFLAGS += -D__GCC4BUILD__ 255 else 256 libISSM_a_CXXFLAGS += -DMX_COMPAT_32 257 endif 258 259 260 261 262 #Parallel compilation 263 libpISSM_a_SOURCES = ./objects/objects.h\ 264 ./objects/Object.h\ 265 ./objects/Element.h\ 266 ./objects/Element.cpp\ 267 ./objects/Material.h\ 268 ./objects/Material.cpp\ 269 ./objects/Load.h\ 270 ./objects/Load.cpp\ 271 ./objects/SolverEnum.h\ 272 ./objects/Contour.h\ 273 ./objects/Contour.cpp\ 274 ./objects/OptArgs.h\ 275 ./objects/OptPars.h\ 276 ./objects/Friction.h\ 277 ./objects/Friction.cpp\ 278 ./objects/Node.h\ 279 ./objects/Node.cpp\ 280 ./objects/Tria.h\ 281 ./objects/Tria.cpp\ 282 ./objects/Sing.h\ 283 ./objects/Sing.cpp\ 284 ./objects/Beam.h\ 285 ./objects/Beam.cpp\ 286 ./objects/Penta.h\ 287 ./objects/Penta.cpp\ 288 ./objects/Matice.h\ 289 ./objects/Matice.cpp\ 290 ./objects/Matpar.h\ 291 ./objects/Matpar.cpp\ 292 ./objects/Input.h\ 293 ./objects/Input.cpp\ 294 ./objects/ParameterInputs.h\ 295 ./objects/ParameterInputs.cpp\ 296 ./objects/Spc.cpp\ 297 ./objects/Spc.h\ 298 ./objects/Rgb.cpp\ 299 ./objects/Rgb.h\ 300 ./objects/Penpair.cpp\ 301 ./objects/Penpair.h\ 302 ./objects/Pengrid.cpp\ 303 ./objects/Pengrid.h\ 304 ./objects/Icefront.cpp\ 305 ./objects/Icefront.h\ 306 ./objects/Param.cpp\ 307 ./objects/Param.h\ 308 ./objects/NodeSets.cpp\ 309 ./objects/NodeSets.h\ 310 ./DataSet/DataSet.cpp\ 311 ./DataSet/DataSet.h\ 312 ./shared/shared.h\ 313 ./shared/Alloc/alloc.h\ 314 ./shared/Alloc/alloc.cpp\ 315 ./shared/Matlab/matlabshared.h\ 316 ./shared/Matlab/PrintfFunction.cpp\ 317 ./shared/Matlab/ModuleBoot.cpp\ 318 ./shared/Matlab/mxGetAssignedField.cpp\ 319 ./shared/Matlab/mxGetField.cpp\ 320 ./shared/Matlab/CheckNumMatlabArguments.cpp\ 321 ./shared/Matrix/matrix.h\ 322 ./shared/Matrix/MatrixUtils.cpp\ 323 ./shared/Dofs/dofs.h\ 324 ./shared/Dofs/dofsetgen.cpp\ 325 ./shared/Dofs/DistributeNumDofs.cpp\ 326 ./shared/Numerics/numerics.h\ 327 ./shared/Numerics/GaussPoints.h\ 328 ./shared/Numerics/GaussPoints.cpp\ 329 ./shared/Numerics/cross.cpp\ 330 ./shared/Numerics/norm.cpp\ 331 ./shared/Numerics/BrentSearch.cpp\ 332 ./shared/Numerics/OptFunc.cpp\ 333 ./shared/Numerics/extrema.cpp\ 334 ./shared/Exceptions/exceptions.h\ 335 ./shared/Exceptions/Exceptions.cpp\ 336 ./shared/Exceptions/exprintf.cpp\ 337 ./shared/Exp/exp.h\ 338 ./shared/Exp/IsInPoly.cpp\ 339 ./shared/Exp/IsInPolySerial.cpp\ 340 ./shared/Exp/DomainOutlineRead.cpp\ 341 ./shared/TriMesh/trimesh.h\ 342 ./shared/TriMesh/AssociateSegmentToElement.cpp\ 343 ./shared/TriMesh/GridInsideHole.cpp\ 344 ./shared/TriMesh/OrderSegments.cpp\ 345 ./shared/TriMesh/SplitMeshForRifts.cpp\ 346 ./shared/TriMesh/TriMeshUtils.cpp\ 347 ./shared/Sorting/binary_search.cpp\ 348 ./shared/Sorting/sorting.h\ 349 ./shared/Elements/elements.h\ 350 ./shared/Elements/ResolvePointers.cpp\ 351 ./shared/Elements/Paterson.cpp\ 352 ./shared/Elements/GetElementNodeData.cpp\ 353 ./toolkits/petsc\ 354 ./toolkits/petsc/patches\ 355 ./toolkits/petsc/patches/petscpatches.h\ 356 ./toolkits/petsc/patches/MatlabMatrixToPetscMatrix.cpp\ 357 ./toolkits/petsc/patches/MatlabVectorToPetscVector.cpp\ 358 ./toolkits/petsc/patches/PetscMatrixToMatlabMatrix.cpp\ 359 ./toolkits/petsc/patches/PetscVectorToMatlabVector.cpp\ 360 ./toolkits/petsc/patches/MatlabMatrixToDoubleMatrix.cpp\ 361 ./toolkits/petsc/patches/MatlabVectorToDoubleVector.cpp\ 362 ./toolkits/petsc/patches/PetscDetermineLocalSize.cpp\ 363 ./toolkits/petsc/patches/VecTranspose.cpp\ 364 ./toolkits/petsc/patches/VecToMPISerial.cpp\ 365 ./toolkits/petsc/patches/MatToSerial.cpp\ 366 ./toolkits/petsc/patches/VecMerge.cpp\ 367 ./toolkits/petsc/patches/NewVec.cpp\ 368 ./toolkits/petsc/patches/NewVecFromLocalSize.cpp\ 369 ./toolkits/petsc/patches/PetscOptionsDetermineSolverType.cpp\ 370 ./toolkits/petsc/patches/PetscOptionsInsertMultipleString.cpp\ 371 ./toolkits/petsc/patches/NewMat.cpp\ 372 ./toolkits/petsc/patches/VecFree.cpp\ 373 ./toolkits/petsc/patches/VecDuplicatePatch.cpp\ 374 ./toolkits/petsc/patches/KSPFree.cpp\ 375 ./toolkits/petsc/patches/ISFree.cpp\ 376 ./toolkits/petsc/patches/MatFree.cpp\ 377 ./toolkits/petsc/patches/GetOwnershipBoundariesFromRange.cpp\ 378 ./toolkits/petsc/patches/VecPartition.cpp\ 379 ./toolkits/petsc/patches/MatPartition.cpp\ 380 ./toolkits/petsc/patches/MatInvert.cpp\ 381 ./toolkits/petsc/patches/MatMultPatch.cpp\ 382 ./toolkits/petsc/petscincludes.h\ 383 ./toolkits/mpi/mpiincludes.h\ 384 ./toolkits/mpi/patches/mpipatches.h\ 385 ./toolkits/mpi/patches/MPI_Upperrow.cpp\ 386 ./toolkits/mpi/patches/MPI_Lowerrow.cpp\ 387 ./toolkits/mpi/patches/MPI_Boundariesfromrange.cpp\ 388 ./toolkits/metis/metisincludes.h\ 389 ./toolkits/triangle/triangleincludes.h\ 390 ./toolkits.h\ 391 ./io/io.h\ 392 ./io/FetchData.cpp\ 393 ./io/WriteData.cpp\ 394 ./io/WriteDataToDisk.cpp\ 395 ./io/SerialFetchData.cpp\ 396 ./io/SerialWriteData.cpp\ 397 ./io/ParallelFetchData.cpp\ 398 ./io/ParallelFetchInteger.cpp\ 399 ./io/ParallelFetchMat.cpp\ 400 ./io/ParallelFetchScalar.cpp\ 401 ./io/ParallelFetchString.cpp\ 402 ./io/ModelFetchData.cpp\ 403 ./io/WriteNodeSets.cpp\ 404 ./io/WriteParams.cpp\ 405 ./io/FetchNodeSets.cpp\ 406 ./io/FetchRifts.cpp\ 407 ./io/ParameterInputsInit.cpp\ 408 ./EnumDefinitions/EnumDefinitions.h\ 409 ./EnumDefinitions/EnumDefinitions.cpp\ 410 ./EnumDefinitions/AnalysisTypeAsEnum.cpp\ 411 ./ModelProcessorx/Model.h\ 412 ./ModelProcessorx/Model.cpp\ 413 ./ModelProcessorx/CreateDataSets.cpp\ 418 414 ./ModelProcessorx/CreateParameters.cpp\ 419 415 ./ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp\ … … 510 506 bin_PROGRAMS = 511 507 else 512 bin_PROGRAMS = diagnostic.exe control.exe 513 #thermalsteady.exe 508 bin_PROGRAMS = diagnostic.exe control.exe thermal.exe 514 509 endif 515 510 … … 522 517 control_exe_CXXFLAGS= -fPIC -D_PARALLEL_ 523 518 524 thermal steady_exe_SOURCES = parallel/thermalsteady.cpp525 thermal steady_exe_CXXFLAGS= -fPIC -D_PARALLEL_519 thermal_exe_SOURCES = parallel/thermal.cpp 520 thermal_exe_CXXFLAGS= -fPIC -D_PARALLEL_ -
issm/trunk/src/c/Misfitx/Misfitx.cpp
r1 r465 14 14 15 15 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 16 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type ){16 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 17 17 18 18 /*output: */ … … 24 24 25 25 /*Compute gradients: */ 26 elements->Misfit(&J, u_g,u_g_obs,inputs,analysis_type );26 elements->Misfit(&J, u_g,u_g_obs,inputs,analysis_type,sub_analysis_type); 27 27 28 28 /*Sum all J from all cpus of the cluster:*/ -
issm/trunk/src/c/Misfitx/Misfitx.h
r1 r465 10 10 /* local prototypes: */ 11 11 void Misfitx( double* pJ, DataSet* elements,DataSet* nodes, DataSet* loads, DataSet* materials, 12 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type );12 double* u_g, double* u_g_obs, ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 13 13 14 14 #endif /* _MISFITX_H */ -
issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp
r209 r465 13 13 #include "../Model.h" 14 14 15 void CreateParametersControl(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount){15 void CreateParametersControl(DataSet** pparameters,Model* model,ConstDataHandle model_handle){ 16 16 17 17 int i; 18 18 19 DataSet* parameters=NULL; 19 20 Param* param = NULL; 20 21 int count; … … 29 30 double* vy_obs=NULL; 30 31 31 /*Get counter : */ 32 count=*pcount; 32 /*Get parameters: */ 33 parameters=*pparameters; 34 count=parameters->Size(); 33 35 34 36 /*control_type: */ … … 132 134 133 135 /*Assign output pointer: */ 134 *p count=count;136 *pparameters=parameters; 135 137 } 136 138 -
issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp
r387 r465 21 21 int count=1; 22 22 int analysis_type; 23 int sub_analysis_type; 23 24 int numberofdofspernode; 24 25 int dim; … … 29 30 //Get analysis_type: 30 31 analysis_type=AnalysisTypeAsEnum(model->analysis_type); 32 sub_analysis_type=AnalysisTypeAsEnum(model->sub_analysis_type); 31 33 32 34 count++; 33 35 param= new Param(count,"analysis_type",INTEGER); 34 36 param->SetInteger(analysis_type); 37 parameters->AddObject(param); 38 39 count++; 40 param= new Param(count,"sub_analysis_type",INTEGER); 41 param->SetInteger(sub_analysis_type); 35 42 parameters->AddObject(param); 36 43 … … 187 194 188 195 /*Deal with numberofdofspernode: */ 189 DistributeNumDofs(&numberofdofspernode,analysis_type );196 DistributeNumDofs(&numberofdofspernode,analysis_type,sub_analysis_type); 190 197 191 198 count++; … … 194 201 parameters->AddObject(param); 195 202 196 /*Deal with control parameters: */197 if (analysis_type==ControlAnalysisEnum()){198 CreateParametersControl(parameters,model,model_handle,&count);199 }200 if (analysis_type==DiagnosticHorizAnalysisEnum()){201 CreateParametersDiagnosticHoriz(parameters,model,model_handle,&count);202 }203 203 204 204 -
issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateElementsNodesAndMaterialsDiagnosticHoriz.cpp
r454 r465 38 38 39 39 int analysis_type; 40 int sub_analysis_type; 40 41 41 42 /*output: */ … … 154 155 /*Get analysis_type: */ 155 156 analysis_type=AnalysisTypeAsEnum(model->analysis_type); 157 sub_analysis_type=AnalysisTypeAsEnum(model->sub_analysis_type); 156 158 157 159 … … 571 573 572 574 /*Get number of dofs per node: */ 573 DistributeNumDofs(&node_numdofs,analysis_type );575 DistributeNumDofs(&node_numdofs,analysis_type,sub_analysis_type); 574 576 575 577 for (i=0;i<model->numberofnodes;i++){ -
issm/trunk/src/c/ModelProcessorx/DiagnosticHoriz/CreateParametersDiagnosticHoriz.cpp
r300 r465 13 13 #include "../Model.h" 14 14 15 void CreateParametersDiagnosticHoriz(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount){15 void CreateParametersDiagnosticHoriz(DataSet** pparameters,Model* model,ConstDataHandle model_handle){ 16 16 17 17 Param* param = NULL; 18 DataSet* parameters=NULL; 18 19 int count; 19 20 int i; … … 23 24 double* vz=NULL; 24 25 26 /*recover parameters : */ 27 parameters=*pparameters; 28 29 count=parameters->Size(); 30 25 31 /*Now, is the flag macayaealpattyn on? otherwise, do nothing: */ 26 32 if (!model->ismacayealpattyn)return; 27 28 /*Get counter : */29 count=*pcount;30 33 31 34 /*Get vx and vy: */ … … 61 64 62 65 /*Assign output pointer: */ 63 *p count=count;66 *pparameters=parameters; 64 67 } 65 68 -
issm/trunk/src/c/ModelProcessorx/DiagnosticHutter/CreateElementsNodesAndMaterialsDiagnosticHutter.cpp
r367 r465 40 40 41 41 int analysis_type; 42 int sub_analysis_type; 42 43 43 44 /*output: */ … … 106 107 /*Get analysis_type: */ 107 108 analysis_type=AnalysisTypeAsEnum(model->analysis_type); 109 sub_analysis_type=AnalysisTypeAsEnum(model->sub_analysis_type); 108 110 109 111 /*Width of elements: */ … … 297 299 298 300 /*Get number of dofs per node: */ 299 DistributeNumDofs(&node_numdofs,analysis_type );301 DistributeNumDofs(&node_numdofs,analysis_type,sub_analysis_type); 300 302 301 303 for (i=0;i<model->numberofnodes;i++){ -
issm/trunk/src/c/ModelProcessorx/DiagnosticStokes/CreateElementsNodesAndMaterialsDiagnosticStokes.cpp
r454 r465 38 38 39 39 int analysis_type; 40 int sub_analysis_type; 40 41 41 42 /*output: */ … … 134 135 /*Get analysis_type: */ 135 136 analysis_type=AnalysisTypeAsEnum(model->analysis_type); 137 sub_analysis_type=AnalysisTypeAsEnum(model->sub_analysis_type); 136 138 137 139 /*Width of elements: */ … … 428 430 429 431 /*Get number of dofs per node: */ 430 DistributeNumDofs(&node_numdofs,analysis_type );432 DistributeNumDofs(&node_numdofs,analysis_type,sub_analysis_type); 431 433 432 434 for (i=0;i<model->numberofnodes;i++){ -
issm/trunk/src/c/ModelProcessorx/DiagnosticVert/CreateElementsNodesAndMaterialsDiagnosticVert.cpp
r454 r465 37 37 38 38 int analysis_type; 39 int sub_analysis_type; 39 40 40 41 /*output: */ … … 143 144 /*Get analysis_type: */ 144 145 analysis_type=AnalysisTypeAsEnum(model->analysis_type); 146 sub_analysis_type=AnalysisTypeAsEnum(model->sub_analysis_type); 145 147 146 148 /*Width of elements: */ … … 354 356 355 357 /*Get number of dofs per node: */ 356 DistributeNumDofs(&node_numdofs,analysis_type );358 DistributeNumDofs(&node_numdofs,analysis_type,sub_analysis_type); 357 359 358 360 for (i=0;i<model->numberofnodes;i++){ -
issm/trunk/src/c/ModelProcessorx/Model.cpp
r394 r465 37 37 model->meshtype=NULL; 38 38 model->analysis_type=NULL; 39 model->sub_analysis_type=NULL; 39 40 model->numberofelements=0; 40 41 model->numberofnodes=0; … … 243 244 xfree((void**)&model->meshtype); 244 245 xfree((void**)&model->analysis_type); 246 xfree((void**)&model->sub_analysis_type); 245 247 246 248 if(model->numrifts){ … … 289 291 /*In ModelInit, we get all the data that is not difficult to get, and that is small: */ 290 292 ModelFetchData((void**)&model->analysis_type,NULL,NULL,model_handle,"analysis_type","String",NULL); 293 ModelFetchData((void**)&model->sub_analysis_type,NULL,NULL,model_handle,"sub_analysis_type","String",NULL); 291 294 292 295 ModelFetchData((void**)&model->meshtype,NULL,NULL,model_handle,"type","String",NULL); -
issm/trunk/src/c/ModelProcessorx/Model.h
r387 r465 16 16 char* meshtype; 17 17 char* analysis_type; 18 char* sub_analysis_type; 18 19 char* solverstring; 19 20 … … 174 175 175 176 /*Creation of fem datasets: general drivers*/ 176 void CreateElementsNodesAndMaterials(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, Model* model,ConstDataHandle model_handle); 177 void CreateConstraints(DataSet** pconstraints, Model* model,ConstDataHandle model_handle); 178 void CreateLoads(DataSet** ploads, Model* model, ConstDataHandle model_handle); 177 void CreateDataSets(DataSet** pelements,DataSet** pnodes, DataSet** pmaterials, DataSet** pconstraints, DataSet** ploads,DataSet** pparameters,Model* model,ConstDataHandle model_handle); 179 178 void CreateParameters(DataSet** pparameters,Model* model,ConstDataHandle model_handle); 180 179 … … 186 185 void CreateConstraintsDiagnosticHoriz(DataSet** pconstraints,Model* model,ConstDataHandle model_handle); 187 186 void CreateLoadsDiagnosticHoriz(DataSet** ploads, Model* model, ConstDataHandle model_handle); 188 void CreateParametersDiagnosticHoriz(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);187 void CreateParametersDiagnosticHoriz(DataSet** pparameters,Model* model,ConstDataHandle model_handle); 189 188 190 189 /*diagnostic vertical*/ … … 192 191 void CreateConstraintsDiagnosticVert(DataSet** pconstraints,Model* model,ConstDataHandle model_handle); 193 192 void CreateLoadsDiagnosticVert(DataSet** ploads, Model* model, ConstDataHandle model_handle); 194 void CreateParametersDiagnosticVert(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);195 193 196 194 /*diagnostic hutter*/ … … 198 196 void CreateConstraintsDiagnosticHutter(DataSet** pconstraints,Model* model,ConstDataHandle model_handle); 199 197 void CreateLoadsDiagnosticHutter(DataSet** ploads, Model* model, ConstDataHandle model_handle); 200 void CreateParametersDiagnosticHutter(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);201 198 202 199 /*diagnostic stokes*/ … … 204 201 void CreateConstraintsDiagnosticStokes(DataSet** pconstraints,Model* model,ConstDataHandle model_handle); 205 202 void CreateLoadsDiagnosticStokes(DataSet** ploads, Model* model, ConstDataHandle model_handle); 206 void CreateParametersDiagnosticStokes(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);207 203 208 204 /*slope compute*/ … … 210 206 void CreateConstraintsSlopeCompute(DataSet** pconstraints,Model* model,ConstDataHandle model_handle); 211 207 void CreateLoadsSlopeCompute(DataSet** ploads, Model* model, ConstDataHandle model_handle); 212 void CreateParametersSlopeCompute(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);213 208 214 209 /*control:*/ 215 void CreateParametersControl(DataSet* parameters,Model* model,ConstDataHandle model_handle,int* pcount);210 void CreateParametersControl(DataSet** pparameters,Model* model,ConstDataHandle model_handle); 216 211 217 212 -
issm/trunk/src/c/ModelProcessorx/SlopeCompute/CreateElementsNodesAndMaterialsSlopeCompute.cpp
r454 r465 36 36 37 37 int analysis_type; 38 int sub_analysis_type; 38 39 39 40 /*output: */ … … 131 132 /*Get analysis_type: */ 132 133 analysis_type=AnalysisTypeAsEnum(model->analysis_type); 134 sub_analysis_type=AnalysisTypeAsEnum(model->sub_analysis_type); 133 135 134 136 /*Width of elements: */ … … 397 399 398 400 /*Get number of dofs per node: */ 399 DistributeNumDofs(&node_numdofs,analysis_type );401 DistributeNumDofs(&node_numdofs,analysis_type,sub_analysis_type); 400 402 401 403 for (i=0;i<model->numberofnodes;i++){ -
issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.cpp
r1 r465 14 14 15 15 void PenaltyConstraintsx(int* pconverged, int* pnum_unstable_constraints, DataSet* elements,DataSet* nodes, 16 DataSet* loads,DataSet* materials, ParameterInputs* inputs,int analysis_type ){16 DataSet* loads,DataSet* materials, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 17 17 18 18 int i; … … 31 31 * management routine, otherwise, skip : */ 32 32 if (loads->RiftIsPresent()){ 33 loads->RiftConstraints(&num_unstable_constraints,inputs,analysis_type );33 loads->RiftConstraints(&num_unstable_constraints,inputs,analysis_type,sub_analysis_type); 34 34 } 35 35 else if(loads->MeltingIsPresent()){ 36 loads->MeltingConstraints(&num_unstable_constraints,inputs,analysis_type );36 loads->MeltingConstraints(&num_unstable_constraints,inputs,analysis_type,sub_analysis_type); 37 37 } 38 38 else{ -
issm/trunk/src/c/PenaltyConstraintsx/PenaltyConstraintsx.h
r1 r465 11 11 /* local prototypes: */ 12 12 void PenaltyConstraintsx(int* pconverged, int* pnum_unstable_constraints, DataSet* elements,DataSet* nodes, 13 DataSet* loads,DataSet* materials, ParameterInputs* inputs,int analysis_type );13 DataSet* loads,DataSet* materials, ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 14 14 15 15 #endif /* _PENALTYCONSTRAINTSX_H */ -
issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.cpp
r1 r465 14 14 15 15 void PenaltySystemMatricesx(Mat Kgg, Vec pg,DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, 16 int kflag,int pflag,ParameterInputs* inputs,int analysis_type ){16 int kflag,int pflag,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 17 17 18 18 int i; … … 33 33 34 34 /*Add penalties to stiffnesses, from loads: */ 35 if(kflag)loads->PenaltyCreateKMatrix(Kgg,inputs,kmax,analysis_type );36 if(pflag)loads->PenaltyCreatePVector(pg,inputs,kmax,analysis_type );35 if(kflag)loads->PenaltyCreateKMatrix(Kgg,inputs,kmax,analysis_type,sub_analysis_type); 36 if(pflag)loads->PenaltyCreatePVector(pg,inputs,kmax,analysis_type,sub_analysis_type); 37 37 38 38 /*Assemble matrices: */ -
issm/trunk/src/c/PenaltySystemMatricesx/PenaltySystemMatricesx.h
r1 r465 11 11 /* local prototypes: */ 12 12 void PenaltySystemMatricesx(Mat Kgg, Vec pg,DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, 13 int kflag,int pflag,ParameterInputs* inputs,int analysis_type );13 int kflag,int pflag,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 14 14 15 15 #endif /* _PENALTYSYSTEMMATRICESX_H */ -
issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp
r304 r465 54 54 55 55 56 if ( (analysis_type==ControlAnalysisEnum()) || 57 (analysis_type==DiagnosticHorizAnalysisEnum()) || 58 (analysis_type==DiagnosticVertAnalysisEnum()) || 59 (analysis_type==DiagnosticStokesAnalysisEnum()) 60 ){ 56 if ( (analysis_type==ControlAnalysisEnum()) || (analysis_type==DiagnosticAnalysisEnum())){ 61 57 62 58 parameters->FindParam((void*)&vx,"vx"); -
issm/trunk/src/c/SystemMatricesx/SystemMatricesx.cpp
r128 r465 14 14 15 15 void SystemMatricesx(Mat* pKgg, Vec* ppg,DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, 16 int kflag,int pflag,int connectivity,int numberofdofspernode,ParameterInputs* inputs,int analysis_type ){16 int kflag,int pflag,int connectivity,int numberofdofspernode,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 17 17 18 18 int i; … … 40 40 41 41 /*Fill stiffness matrix and right hand side vector, from elements: */ 42 if(kflag)elements->CreateKMatrix(Kgg,inputs,analysis_type );43 if(pflag)elements->CreatePVector(pg,inputs,analysis_type );42 if(kflag)elements->CreateKMatrix(Kgg,inputs,analysis_type,sub_analysis_type); 43 if(pflag)elements->CreatePVector(pg,inputs,analysis_type,sub_analysis_type); 44 44 45 45 /*Fill stiffness matrix and right hand side vector, from loads: */ 46 if(kflag)loads->CreateKMatrix(Kgg,inputs,analysis_type );47 if(pflag)loads->CreatePVector(pg,inputs,analysis_type );46 if(kflag)loads->CreateKMatrix(Kgg,inputs,analysis_type,sub_analysis_type); 47 if(pflag)loads->CreatePVector(pg,inputs,analysis_type,sub_analysis_type); 48 48 49 49 /*Assemble matrices: */ -
issm/trunk/src/c/SystemMatricesx/SystemMatricesx.h
r1 r465 11 11 /* local prototypes: */ 12 12 void SystemMatricesx(Mat* pKgg, Vec* ppg,DataSet* elements,DataSet* nodes,DataSet* loads,DataSet* materials, 13 int kflag,int pflag,int connectivity,int numberofdofspernode,ParameterInputs* inputs,int analysis_type );13 int kflag,int pflag,int connectivity,int numberofdofspernode,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 14 14 15 15 #endif /* _SYSTEMMATRICESX_H */ -
issm/trunk/src/c/io/SerialFetchData.cpp
r464 r465 27 27 int outdataset_size; 28 28 29 double* outmatrix =NULL;30 Mat outpetscmatrix =NULL;29 double* outmatrix; 30 Mat outpetscmatrix; 31 31 double* outmatrix_workspace=NULL;; 32 32 int outmatrix_rows,outmatrix_cols; 33 33 int petsc; 34 34 35 double* outvector =NULL;36 Vec outpetscvector =NULL;35 double* outvector; 36 Vec outpetscvector; 37 37 double* outvector_workspace=NULL; 38 38 int outvector_rows; -
issm/trunk/src/c/objects/Beam.cpp
r350 r465 212 212 #define __FUNCT__ "Beam::CreateKMatrix" 213 213 214 void Beam::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){214 void Beam::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 215 215 216 216 /*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */ 217 if (analysis_type==DiagnosticHutterAnalysisEnum()) { 218 219 CreateKMatrixDiagnosticHutter( Kgg,inputs,analysis_type); 220 217 if (analysis_type==DiagnosticAnalysisEnum()) { 218 219 if (sub_analysis_type==HutterAnalysisEnum()) { 220 221 CreateKMatrixDiagnosticHutter( Kgg,inputs,analysis_type,sub_analysis_type); 222 } 223 else 224 throw ErrorException(__FUNCT__,exprintf("%s%i%s\n","sub_analysis_type: ",sub_analysis_type," not supported yet")); 221 225 } 222 226 else{ … … 230 234 #define __FUNCT__ "Beam::CreateKMatrixDiagnosticHutter" 231 235 232 void Beam::CreateKMatrixDiagnosticHutter(Mat Kgg,void* vinputs,int analysis_type ){236 void Beam::CreateKMatrixDiagnosticHutter(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type){ 233 237 234 238 … … 265 269 #undef __FUNCT__ 266 270 #define __FUNCT__ "Beam::CreatePVector" 267 void Beam::CreatePVector(Vec pg,void* inputs,int analysis_type ){271 void Beam::CreatePVector(Vec pg,void* inputs,int analysis_type,int sub_analysis_type){ 268 272 269 273 /*Just branch to the correct load generator, according to the type of analysis we are carrying out: */ 270 if (analysis_type==DiagnosticHutterAnalysisEnum()) { 271 CreatePVectorDiagnosticHutter( pg,inputs,analysis_type); 274 if (analysis_type==DiagnosticAnalysisEnum()) { 275 if (sub_analysis_type==HutterAnalysisEnum()) { 276 CreatePVectorDiagnosticHutter( pg,inputs,analysis_type,sub_analysis_type); 277 } 278 else 279 throw ErrorException(__FUNCT__,exprintf("%s%i%s"," analysis ",analysis_type," not supported yet")); 272 280 } 273 281 else{ … … 281 289 #define __FUNCT__ "Beam::CreatePVectorDiagnosticHutter" 282 290 283 void Beam::CreatePVectorDiagnosticHutter( Vec pg, void* vinputs, int analysis_type ){291 void Beam::CreatePVectorDiagnosticHutter( Vec pg, void* vinputs, int analysis_type,int sub_analysis_type){ 284 292 285 293 int i,j,k; … … 534 542 #undef __FUNCT__ 535 543 #define __FUNCT__ "Beam::Du" 536 void Beam::Du(_p_Vec*, double*, double*, void*, int ){544 void Beam::Du(_p_Vec*, double*, double*, void*, int,int){ 537 545 throw ErrorException(__FUNCT__," not supported yet!"); 538 546 } 539 547 #undef __FUNCT__ 540 548 #define __FUNCT__ "Beam::Gradj" 541 void Beam::Gradj(_p_Vec*, double*, double*, void*, int, char*){549 void Beam::Gradj(_p_Vec*, double*, double*, void*, int, int,char*){ 542 550 throw ErrorException(__FUNCT__," not supported yet!"); 543 551 } 544 552 #undef __FUNCT__ 545 553 #define __FUNCT__ "Beam::GradjDrag" 546 void Beam::GradjDrag(_p_Vec*, double*, double*, void*, int ){554 void Beam::GradjDrag(_p_Vec*, double*, double*, void*, int,int ){ 547 555 throw ErrorException(__FUNCT__," not supported yet!"); 548 556 } 549 557 #undef __FUNCT__ 550 558 #define __FUNCT__ "Beam::GradjB" 551 void Beam::GradjB(_p_Vec*, double*, double*, void*, int ){559 void Beam::GradjB(_p_Vec*, double*, double*, void*, int, int){ 552 560 throw ErrorException(__FUNCT__," not supported yet!"); 553 561 } 554 562 #undef __FUNCT__ 555 563 #define __FUNCT__ "Beam::Misfit" 556 double Beam::Misfit(double*, double*, void*, int ){564 double Beam::Misfit(double*, double*, void*, int,int ){ 557 565 throw ErrorException(__FUNCT__," not supported yet!"); 558 566 } -
issm/trunk/src/c/objects/Beam.h
r308 r465 56 56 int MyRank(); 57 57 void Configure(void* loads,void* nodes,void* materials); 58 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type );59 void CreatePVector(Vec pg, void* inputs, int analysis_type );58 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 59 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 60 60 void UpdateFromInputs(void* inputs); 61 61 void GetDofList(int* doflist,int* pnumberofdofs); 62 62 void GetDofList1(int* doflist); 63 void CreateKMatrixDiagnosticHutter(Mat Kgg,void* inputs,int analysis_type );63 void CreateKMatrixDiagnosticHutter(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 64 64 void GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3); 65 void CreatePVectorDiagnosticHutter(Vec pg,void* inputs,int analysis_type );65 void CreatePVectorDiagnosticHutter(Vec pg,void* inputs,int analysis_type,int sub_analysis_type); 66 66 void* GetMatPar(); 67 67 … … 78 78 void GetBedList(double*); 79 79 void GetThicknessList(double* thickness_list); 80 void Du(_p_Vec*, double*, double*, void*, int );81 void Gradj(_p_Vec*, double*, double*, void*, int, char*);82 void GradjDrag(_p_Vec*, double*, double*, void*, int );83 void GradjB(_p_Vec*, double*, double*, void*, int );84 double Misfit(double*, double*, void*, int );80 void Du(_p_Vec*, double*, double*, void*, int,int); 81 void Gradj(_p_Vec*, double*, double*, void*, int, int,char*); 82 void GradjDrag(_p_Vec*, double*, double*, void*, int,int ); 83 void GradjB(_p_Vec*, double*, double*, void*, int,int ); 84 double Misfit(double*, double*, void*, int,int ); 85 85 void GetNodalFunctions(double* l1l2, double gauss_coord); 86 86 void GetParameterValue(double* pvalue, double* value_list,double gauss_coord); -
issm/trunk/src/c/objects/Element.h
r301 r465 24 24 virtual void Demarshall(char** pmarshalled_dataset)=0; 25 25 virtual void Configure(void* loads,void* nodes,void* materials)=0; 26 virtual void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type )=0;27 virtual void CreatePVector(Vec pg, void* inputs, int analysis_type )=0;26 virtual void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type)=0; 27 virtual void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type)=0; 28 28 virtual void UpdateFromInputs(void* inputs)=0; 29 29 virtual void GetNodes(void** nodes)=0; … … 33 33 virtual void GetThicknessList(double* thickness_list)=0; 34 34 virtual void GetBedList(double* bed_list)=0; 35 virtual void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type )=0;36 virtual void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type, char* control_type)=0;37 virtual void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type )=0;38 virtual void GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type )=0;39 virtual double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type )=0;35 virtual void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type)=0; 36 virtual void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type)=0; 37 virtual void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 38 virtual void GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type)=0; 39 virtual double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type)=0; 40 40 virtual void ComputePressure(Vec p_g)=0; 41 41 -
issm/trunk/src/c/objects/Icefront.cpp
r442 r465 199 199 return my_rank; 200 200 } 201 void Icefront::DistributeNumDofs(int* numdofspernode,int analysis_type ){return;}201 void Icefront::DistributeNumDofs(int* numdofspernode,int analysis_type,int sub_analysis_type){return;} 202 202 203 203 #undef __FUNCT__ … … 240 240 #define __FUNCT__ "Icefront::CreateKMatrix" 241 241 242 void Icefront::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){242 void Icefront::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 243 243 244 244 /*No stiffness loads applied, do nothing: */ … … 250 250 #undef __FUNCT__ 251 251 #define __FUNCT__ "Icefront::CreatePVector" 252 void Icefront::CreatePVector(Vec pg, void* inputs, int analysis_type ){252 void Icefront::CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 253 253 254 254 /*Just branch to the correct element icefront vector generator, according to the type of analysis we are carrying out: */ 255 if ((analysis_type==DiagnosticHorizAnalysisEnum()) || (analysis_type==ControlAnalysisEnum())){ 256 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type); 257 } 258 else if ((analysis_type==DiagnosticStokesAnalysisEnum())){ 259 260 CreatePVectorDiagnosticStokes( pg,inputs,analysis_type); 255 if (analysis_type==ControlAnalysisEnum()){ 256 257 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type,sub_analysis_type); 258 259 } 260 else if (analysis_type==DiagnosticAnalysisEnum()){ 261 262 if (sub_analysis_type==HorizAnalysisEnum()){ 263 264 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type,sub_analysis_type); 265 266 } 267 else if (sub_analysis_type==StokesAnalysisEnum()){ 268 269 CreatePVectorDiagnosticStokes( pg,inputs,analysis_type,sub_analysis_type); 270 271 } 272 else throw ErrorException(__FUNCT__,exprintf("%s%i%s"," sub_analysis_type: ",sub_analysis_type," not supported yet")); 273 261 274 } 262 275 else{ … … 268 281 #undef __FUNCT__ 269 282 #define __FUNCT__ "Icefront::CreatePVectorDiagnosticHoriz" 270 void Icefront::CreatePVectorDiagnosticHoriz( Vec pg, void* inputs, int analysis_type ){283 void Icefront::CreatePVectorDiagnosticHoriz( Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 271 284 272 285 /*Branck on the type of icefront: */ 273 286 if (strcmp(type,"segment")==0){ 274 CreatePVectorDiagnosticHorizSegment(pg,inputs,analysis_type );287 CreatePVectorDiagnosticHorizSegment(pg,inputs,analysis_type,sub_analysis_type); 275 288 } 276 289 else{ 277 CreatePVectorDiagnosticHorizQuad(pg,inputs,analysis_type );290 CreatePVectorDiagnosticHorizQuad(pg,inputs,analysis_type,sub_analysis_type); 278 291 } 279 292 } … … 282 295 #define __FUNCT__ "Icefront::CreatePVectorDiagnosticHorizSegment" 283 296 284 void Icefront::CreatePVectorDiagnosticHorizSegment( Vec pg,void* vinputs, int analysis_type ){297 void Icefront::CreatePVectorDiagnosticHorizSegment( Vec pg,void* vinputs, int analysis_type,int sub_analysis_type){ 285 298 286 299 int i,j; … … 395 408 #undef __FUNCT__ 396 409 #define __FUNCT__ "Icefont::CreatePVectorDiagnosticHorizQuad" 397 void Icefront::CreatePVectorDiagnosticHorizQuad( Vec pg,void* vinputs, int analysis_type ){410 void Icefront::CreatePVectorDiagnosticHorizQuad( Vec pg,void* vinputs, int analysis_type,int sub_analysis_type){ 398 411 399 412 int i,j; … … 557 570 #undef __FUNCT__ 558 571 #define __FUNCT__ "Icefont::CreatePVectorDiagnosticStokes" 559 void Icefront::CreatePVectorDiagnosticStokes( Vec pg,void* vinputs, int analysis_type ){572 void Icefront::CreatePVectorDiagnosticStokes( Vec pg,void* vinputs, int analysis_type,int sub_analysis_type){ 560 573 561 574 int i,j; … … 853 866 #undef __FUNCT__ 854 867 #define __FUNCT__ "Icefront::PenaltyCreateKMatrix" 855 void Icefront::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type ){868 void Icefront::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){ 856 869 /*do nothing: */ 857 870 } … … 859 872 #undef __FUNCT__ 860 873 #define __FUNCT__ "Icefront::PenaltyCreatePVector" 861 void Icefront::PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type ){874 void Icefront::PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){ 862 875 /*do nothing: */ 863 876 } -
issm/trunk/src/c/objects/Icefront.h
r416 r465 55 55 int GetId(); 56 56 int MyRank(); 57 void DistributeNumDofs(int* numdofspernode,int analysis_type );57 void DistributeNumDofs(int* numdofspernode,int analysis_type,int sub_analysis_type); 58 58 void Configure(void* elements,void* nodes,void* materials); 59 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type );59 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 60 60 void UpdateFromInputs(void* inputs); 61 61 62 void CreatePVector(Vec pg, void* inputs, int analysis_type );63 void CreatePVectorDiagnosticHoriz( Vec pg, void* inputs, int analysis_type );64 void CreatePVectorDiagnosticHorizSegment( Vec pg,void* inputs, int analysis_type );65 void CreatePVectorDiagnosticHorizQuad( Vec pg,void* inputs, int analysis_type );66 void CreatePVectorDiagnosticStokes( Vec pg,void* inputs, int analysis_type );62 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 63 void CreatePVectorDiagnosticHoriz( Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 64 void CreatePVectorDiagnosticHorizSegment( Vec pg,void* inputs, int analysis_type,int sub_analysis_type); 65 void CreatePVectorDiagnosticHorizQuad( Vec pg,void* inputs, int analysis_type,int sub_analysis_type); 66 void CreatePVectorDiagnosticStokes( Vec pg,void* inputs, int analysis_type,int sub_analysis_type); 67 67 void GetDofList(int* doflist,int* pnumberofdofs); 68 68 void SegmentPressureLoad(double* pe_g,double rho_water,double rho_ice,double gravity, double* thickness_list, double* bed_list, double* normal,double length,int fill); … … 71 71 void QuadPressureLoadStokes(double* pe_g,double rho_water,double rho_ice,double gravity, double* thickness_list, double* bed_list, 72 72 double* normal1,double* normal2,double* normal3,double* normal4,double* xyz_list, int fill); 73 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type );74 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type );73 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 74 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 75 75 Object* copy(); 76 76 }; -
issm/trunk/src/c/objects/Load.h
r246 r465 24 24 virtual void Demarshall(char** pmarshalled_dataset)=0; 25 25 virtual void Configure(void* elements,void* nodes,void* materials)=0; 26 virtual void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type )=0;27 virtual void CreatePVector(Vec pg, void* inputs, int analysis_type )=0;26 virtual void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type)=0; 27 virtual void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type)=0; 28 28 virtual void UpdateFromInputs(void* inputs)=0; 29 virtual void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type )=0;30 virtual void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type )=0;29 virtual void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type)=0; 30 virtual void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type)=0; 31 31 32 32 int Enum(); -
issm/trunk/src/c/objects/OptArgs.h
r377 r465 20 20 mxArray* n; 21 21 mxArray* analysis_type; 22 mxArray* sub_analysis_type; 22 23 23 24 }; -
issm/trunk/src/c/objects/Pengrid.cpp
r461 r465 135 135 return my_rank; 136 136 } 137 void Pengrid::DistributeNumDofs(int* numdofpernode,int analysis_type ){return;}137 void Pengrid::DistributeNumDofs(int* numdofpernode,int analysis_type,int sub_analysis_type){return;} 138 138 139 139 #undef __FUNCT__ … … 156 156 #define __FUNCT__ "Pengrid::CreateKMatrix" 157 157 158 void Pengrid::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){158 void Pengrid::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 159 159 160 160 /*No loads applied, do nothing: */ … … 165 165 #undef __FUNCT__ 166 166 #define __FUNCT__ "Pengrid::CreatePVector" 167 void Pengrid::CreatePVector(Vec pg, void* inputs, int analysis_type ){167 void Pengrid::CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 168 168 169 169 /*No loads applied, do nothing: */ … … 179 179 #undef __FUNCT__ 180 180 #define __FUNCT__ "Pengrid::PenaltyCreateKMatrix" 181 void Pengrid::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type ){182 183 if ((analysis_type==Diagnostic StokesAnalysisEnum())){184 185 PenaltyCreateKMatrixDiagnosticStokes( Kgg,inputs,kmax,analysis_type );181 void Pengrid::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){ 182 183 if ((analysis_type==DiagnosticAnalysisEnum()) && ((sub_analysis_type==StokesAnalysisEnum()))){ 184 185 PenaltyCreateKMatrixDiagnosticStokes( Kgg,inputs,kmax,analysis_type,sub_analysis_type); 186 186 187 187 } 188 188 else{ 189 throw ErrorException(__FUNCT__,exprintf("%s%i%s \n","analysis: ",analysis_type," not supported yet"));189 throw ErrorException(__FUNCT__,exprintf("%s%i%s%i%s","analysis: ",analysis_type," and sub_analysis_type: ",sub_analysis_type," not supported yet")); 190 190 } 191 191 … … 194 194 #undef __FUNCT__ 195 195 #define __FUNCT__ "Pengrid::PenaltyCreateKMatrixDiagnosticStokes" 196 void Pengrid::PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,void* vinputs,double kmax,int analysis_type ){196 void Pengrid::PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,void* vinputs,double kmax,int analysis_type,int sub_analysis_type){ 197 197 198 198 const int numgrids=1; -
issm/trunk/src/c/objects/Pengrid.h
r394 r465 39 39 int GetId(); 40 40 int MyRank(); 41 void DistributeNumDofs(int* numdofspernode,int analysis_type );41 void DistributeNumDofs(int* numdofspernode,int analysis_type,int sub_analysis_type); 42 42 void Configure(void* elements,void* nodes,void* materials); 43 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type );44 void CreatePVector(Vec pg, void* inputs, int analysis_type );43 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 44 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 45 45 void UpdateFromInputs(void* inputs); 46 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type );47 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type );48 void PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,void* inputs,double kmax,int analysis_type );46 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 47 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 48 void PenaltyCreateKMatrixDiagnosticStokes(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 49 49 void GetDofList(int* doflist,int* pnumberofdofspernode); 50 50 Object* copy(); -
issm/trunk/src/c/objects/Penpair.cpp
r246 r465 182 182 return my_rank; 183 183 } 184 void Penpair::DistributeNumDofs(int* numdofspernode,int analysis_type ){return;}184 void Penpair::DistributeNumDofs(int* numdofspernode,int analysis_type,int sub_analysis_type){return;} 185 185 186 186 #undef __FUNCT__ … … 208 208 #define __FUNCT__ "Penpair::CreateKMatrix" 209 209 210 void Penpair::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){210 void Penpair::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 211 211 212 212 /*No loads applied, do nothing: */ … … 217 217 #undef __FUNCT__ 218 218 #define __FUNCT__ "Penpair::CreatePVector" 219 void Penpair::CreatePVector(Vec pg, void* inputs, int analysis_type ){219 void Penpair::CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 220 220 221 221 /*No loads applied, do nothing: */ … … 231 231 #undef __FUNCT__ 232 232 #define __FUNCT__ "Penpair::PenaltyCreateKMatrix" 233 void Penpair::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type ){233 void Penpair::PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){ 234 234 if(numdofs==1){ 235 235 … … 245 245 #undef __FUNCT__ 246 246 #define __FUNCT__ "Penpair::PenaltyCreatePVector" 247 void Penpair::PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type ){247 void Penpair::PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type){ 248 248 if(numdofs==1){ 249 249 -
issm/trunk/src/c/objects/Penpair.h
r246 r465 51 51 int GetId(); 52 52 int MyRank(); 53 void DistributeNumDofs(int* numdofspernode,int analysis_type );53 void DistributeNumDofs(int* numdofspernode,int analysis_type,int sub_analysis_type); 54 54 void Configure(void* elements,void* nodes,void* materials); 55 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type );56 void CreatePVector(Vec pg, void* inputs, int analysis_type );55 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 56 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 57 57 void UpdateFromInputs(void* inputs); 58 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type );59 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type );58 void PenaltyCreateKMatrix(Mat Kgg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 59 void PenaltyCreatePVector(Vec pg,void* inputs,double kmax,int analysis_type,int sub_analysis_type); 60 60 Object* copy(); 61 61 }; -
issm/trunk/src/c/objects/Penta.cpp
r442 r465 284 284 #define __FUNCT__ "Penta::CreateKMatrix" 285 285 286 void Penta::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){286 void Penta::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 287 287 288 288 /*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */ 289 if ((analysis_type==DiagnosticHorizAnalysisEnum()) || (analysis_type==ControlAnalysisEnum())){ 290 291 CreateKMatrixDiagnosticHoriz( Kgg,inputs,analysis_type); 292 293 } 294 else if ((analysis_type==DiagnosticVertAnalysisEnum())){ 295 296 CreateKMatrixDiagnosticVert( Kgg,inputs,analysis_type); 297 298 } 299 else if ((analysis_type==DiagnosticStokesAnalysisEnum())){ 300 301 CreateKMatrixDiagnosticStokes( Kgg,inputs,analysis_type); 302 303 } 304 else if ( 305 (analysis_type==SurfaceSlopeComputeXAnalysisEnum()) || 306 (analysis_type==SurfaceSlopeComputeYAnalysisEnum()) || 307 (analysis_type==BedSlopeComputeXAnalysisEnum()) || 308 (analysis_type==BedSlopeComputeYAnalysisEnum()) 309 ){ 310 311 CreateKMatrixSlopeCompute( Kgg,inputs,analysis_type); 289 if (analysis_type==ControlAnalysisEnum()){ 290 291 CreateKMatrixDiagnosticHoriz( Kgg,inputs,analysis_type,sub_analysis_type); 292 293 } 294 else if (analysis_type==DiagnosticAnalysisEnum()){ 295 296 if (sub_analysis_type==HorizAnalysisEnum()){ 297 298 CreateKMatrixDiagnosticHoriz( Kgg,inputs,analysis_type,sub_analysis_type); 299 } 300 else if (sub_analysis_type==VertAnalysisEnum()){ 301 302 CreateKMatrixDiagnosticVert( Kgg,inputs,analysis_type,sub_analysis_type); 303 } 304 else if (sub_analysis_type==StokesAnalysisEnum()){ 305 306 CreateKMatrixDiagnosticStokes( Kgg,inputs,analysis_type,sub_analysis_type); 307 308 } 309 else throw ErrorException(__FUNCT__,exprintf("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet")); 310 } 311 else if (analysis_type==SlopeComputeAnalysisEnum()){ 312 313 CreateKMatrixSlopeCompute( Kgg,inputs,analysis_type,sub_analysis_type); 312 314 } 313 315 else{ … … 320 322 #undef __FUNCT__ 321 323 #define __FUNCT__ "Penta:CreateKMatrixDiagnosticHoriz" 322 void Penta::CreateKMatrixDiagnosticHoriz( Mat Kgg, void* vinputs, int analysis_type ){324 void Penta::CreateKMatrixDiagnosticHoriz( Mat Kgg, void* vinputs, int analysis_type,int sub_analysis_type){ 323 325 324 326 … … 421 423 *and use its CreateKMatrix functionality to fill the global stiffness matrix: */ 422 424 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 423 tria->CreateKMatrix(Kgg,inputs, analysis_type );425 tria->CreateKMatrix(Kgg,inputs, analysis_type,sub_analysis_type); 424 426 delete tria; 425 427 return; … … 552 554 553 555 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 554 tria->CreateKMatrixDiagnosticHorizFriction(Kgg,inputs,analysis_type );556 tria->CreateKMatrixDiagnosticHorizFriction(Kgg,inputs,analysis_type,sub_analysis_type); 555 557 delete tria; 556 558 } … … 573 575 #undef __FUNCT__ 574 576 #define __FUNCT__ "Penta:CreateKMatrixDiagnosticVert" 575 void Penta::CreateKMatrixDiagnosticVert( Mat Kgg, void* vinputs, int analysis_type ){577 void Penta::CreateKMatrixDiagnosticVert( Mat Kgg, void* vinputs, int analysis_type,int sub_analysis_type){ 576 578 577 579 /* local declarations */ … … 623 625 if(onsurface){ 624 626 tria=(Tria*)SpawnTria(3,4,5); //nodes 3,4 and 5 are on the surface 625 tria->CreateKMatrixDiagnosticSurfaceVert(Kgg,inputs, analysis_type );627 tria->CreateKMatrixDiagnosticSurfaceVert(Kgg,inputs, analysis_type,sub_analysis_type); 626 628 delete tria; 627 629 } … … 710 712 #undef __FUNCT__ 711 713 #define __FUNCT__ "Penta:CreateKMatrixDiagnosticStokes" 712 void Penta::CreateKMatrixDiagnosticStokes( Mat Kgg, void* vinputs, int analysis_type ){714 void Penta::CreateKMatrixDiagnosticStokes( Mat Kgg, void* vinputs, int analysis_type,int sub_analysis_type){ 713 715 714 716 int i,j; … … 985 987 #undef __FUNCT__ 986 988 #define __FUNCT__ "Penta::CreatePVector" 987 void Penta::CreatePVector(Vec pg, void* inputs, int analysis_type ){989 void Penta::CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 988 990 989 991 /*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */ 990 if ((analysis_type==DiagnosticHorizAnalysisEnum()) || (analysis_type==ControlAnalysisEnum())){ 991 992 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type); 993 } 994 else if ((analysis_type==DiagnosticVertAnalysisEnum())){ 995 996 CreatePVectorDiagnosticVert( pg,inputs,analysis_type); 997 } 998 else if ((analysis_type==DiagnosticStokesAnalysisEnum())){ 999 1000 CreatePVectorDiagnosticStokes( pg,inputs,analysis_type); 1001 } 1002 else if ( 1003 (analysis_type==SurfaceSlopeComputeXAnalysisEnum()) || 1004 (analysis_type==SurfaceSlopeComputeYAnalysisEnum()) || 1005 (analysis_type==BedSlopeComputeXAnalysisEnum()) || 1006 (analysis_type==BedSlopeComputeYAnalysisEnum()) 1007 ){ 1008 1009 CreatePVectorSlopeCompute( pg,inputs,analysis_type); 992 if (analysis_type==ControlAnalysisEnum()){ 993 994 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type,sub_analysis_type); 995 } 996 else if (analysis_type==DiagnosticAnalysisEnum()){ 997 998 if (sub_analysis_type==HorizAnalysisEnum()){ 999 1000 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type,sub_analysis_type); 1001 } 1002 else if (sub_analysis_type==VertAnalysisEnum()){ 1003 1004 CreatePVectorDiagnosticVert( pg,inputs,analysis_type,sub_analysis_type); 1005 } 1006 else if (sub_analysis_type==StokesAnalysisEnum()){ 1007 1008 CreatePVectorDiagnosticStokes( pg,inputs,analysis_type,sub_analysis_type); 1009 } 1010 else throw ErrorException(__FUNCT__,exprintf("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet")); 1011 } 1012 else if (analysis_type==SlopeComputeAnalysisEnum()){ 1013 1014 CreatePVectorSlopeCompute( pg,inputs,analysis_type,sub_analysis_type); 1010 1015 } 1011 1016 else{ … … 1091 1096 #undef __FUNCT__ 1092 1097 #define __FUNCT__ "Penta::Du" 1093 void Penta::Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type ){1098 void Penta::Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type){ 1094 1099 1095 1100 int i; … … 1122 1127 #undef __FUNCT__ 1123 1128 #define __FUNCT__ "Penta::Gradj" 1124 void Penta::Gradj(Vec grad_g,double* velocity,double* adjoint,void* inputs,int analysis_type, char* control_type){1129 void Penta::Gradj(Vec grad_g,double* velocity,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 1125 1130 1126 1131 if (strcmp(control_type,"drag")==0){ 1127 GradjDrag( grad_g,velocity,adjoint,inputs,analysis_type );1132 GradjDrag( grad_g,velocity,adjoint,inputs,analysis_type,sub_analysis_type); 1128 1133 } 1129 1134 else if (strcmp(control_type,"B")==0){ 1130 GradjB( grad_g, velocity, adjoint, inputs,analysis_type );1135 GradjB( grad_g, velocity, adjoint, inputs,analysis_type,sub_analysis_type); 1131 1136 } 1132 1137 else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type)); … … 1135 1140 #undef __FUNCT__ 1136 1141 #define __FUNCT__ "Penta::GradjDrag" 1137 void Penta::GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type ){1142 void Penta::GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){ 1138 1143 1139 1144 … … 1147 1152 1148 1153 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 1149 tria->GradjDrag( grad_g,u_g,lambda_g,inputs,analysis_type );1154 tria->GradjDrag( grad_g,u_g,lambda_g,inputs,analysis_type,sub_analysis_type); 1150 1155 delete tria; 1151 1156 return; … … 1155 1160 #undef __FUNCT__ 1156 1161 #define __FUNCT__ "Penta::GradjB" 1157 void Penta::GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type ){1162 void Penta::GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type){ 1158 1163 throw ErrorException(__FUNCT__," not supported yet!"); 1159 1164 } … … 1161 1166 #undef __FUNCT__ 1162 1167 #define __FUNCT__ "Penta::Misfit" 1163 double Penta::Misfit(double* velocity,double* obs_velocity,void* inputs,int analysis_type ){1168 double Penta::Misfit(double* velocity,double* obs_velocity,void* inputs,int analysis_type,int sub_analysis_type){ 1164 1169 1165 1170 double J; … … 1641 1646 #undef __FUNCT__ 1642 1647 #define __FUNCT__ "Penta::CreatePVectorDiagnosticHoriz" 1643 void Penta::CreatePVectorDiagnosticHoriz( Vec pg, void* vinputs,int analysis_type ){1648 void Penta::CreatePVectorDiagnosticHoriz( Vec pg, void* vinputs,int analysis_type,int sub_analysis_type){ 1644 1649 1645 1650 int i,j; … … 1707 1712 *and use its CreatePVector functionality to return an elementary load vector: */ 1708 1713 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 1709 tria->CreatePVector(pg,inputs, analysis_type );1714 tria->CreatePVector(pg,inputs, analysis_type,sub_analysis_type); 1710 1715 delete tria; 1711 1716 return; … … 1997 2002 #undef __FUNCT__ 1998 2003 #define __FUNCT__ "Penta:CreatePVectorDiagnosticVert" 1999 void Penta::CreatePVectorDiagnosticVert( Vec pg, void* vinputs,int analysis_type ){2004 void Penta::CreatePVectorDiagnosticVert( Vec pg, void* vinputs,int analysis_type,int sub_analysis_type){ 2000 2005 2001 2006 int i; … … 2055 2060 if(onbed){ 2056 2061 tria=(Tria*)SpawnTria(0,1,2); //nodes 0, 1 and 2 are on the bedrock 2057 tria->CreatePVectorDiagnosticBaseVert(pg,inputs, analysis_type );2062 tria->CreatePVectorDiagnosticBaseVert(pg,inputs, analysis_type,sub_analysis_type); 2058 2063 delete tria; 2059 2064 } … … 2176 2181 #define __FUNCT__ "Penta::CreateKMatrixSlopeCompute" 2177 2182 2178 void Penta::CreateKMatrixSlopeCompute(Mat Kgg,void* inputs,int analysis_type ){2183 void Penta::CreateKMatrixSlopeCompute(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 2179 2184 2180 2185 /*Collapsed formulation: */ … … 2186 2191 /*Spawn Tria element from the base of the Penta: */ 2187 2192 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 2188 tria->CreateKMatrix(Kgg,inputs, analysis_type );2193 tria->CreateKMatrix(Kgg,inputs, analysis_type,sub_analysis_type); 2189 2194 delete tria; 2190 2195 return; … … 2195 2200 #define __FUNCT__ "Penta::CreatePVectorSlopeCompute" 2196 2201 2197 void Penta::CreatePVectorSlopeCompute( Vec pg, void* inputs, int analysis_type ){2202 void Penta::CreatePVectorSlopeCompute( Vec pg, void* inputs, int analysis_type,int sub_analysis_type){ 2198 2203 2199 2204 /*Collapsed formulation: */ … … 2205 2210 /*Spawn Tria element from the base of the Penta: */ 2206 2211 tria=(Tria*)SpawnTria(0,1,2); //grids 0, 1 and 2 make the new tria. 2207 tria->CreatePVector(pg,inputs, analysis_type );2212 tria->CreatePVector(pg,inputs, analysis_type,sub_analysis_type); 2208 2213 delete tria; 2209 2214 return; … … 2826 2831 #undef __FUNCT__ 2827 2832 #define __FUNCT__ "Penta::CreatePVectorDiagnosticStokes" 2828 void Penta::CreatePVectorDiagnosticStokes( Vec pg, void* vinputs,int analysis_type ){2833 void Penta::CreatePVectorDiagnosticStokes( Vec pg, void* vinputs,int analysis_type,int sub_analysis_type){ 2829 2834 2830 2835 -
issm/trunk/src/c/objects/Penta.h
r394 r465 73 73 int MyRank(); 74 74 void Configure(void* loads,void* nodes,void* materials); 75 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type );76 void CreateKMatrixDiagnosticHoriz( Mat Kgg, void* inputs, int analysis_type );77 void CreateKMatrixDiagnosticVert( Mat Kgg, void* inputs, int analysis_type );78 void CreatePVector(Vec pg, void* inputs, int analysis_type );75 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 76 void CreateKMatrixDiagnosticHoriz( Mat Kgg, void* inputs, int analysis_type,int sub_analysis_type); 77 void CreateKMatrixDiagnosticVert( Mat Kgg, void* inputs, int analysis_type,int sub_analysis_type); 78 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 79 79 void UpdateFromInputs(void* inputs); 80 80 void GetDofList(int* doflist,int* pnumberofdofs); … … 84 84 void GetNodes(void** nodes); 85 85 int GetOnBed(); 86 void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type );87 void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type, char* control_type);88 void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type );89 void GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type );90 double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type );86 void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type); 87 void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type); 88 void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 89 void GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 90 double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type); 91 91 92 92 void GetThicknessList(double* thickness_list); … … 105 105 void GetNodalFunctionsDerivativesParams(double* dl1dl2dl3dl4dl5dl6,double* gauss_l1l2l3l4); 106 106 void GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_l1l2l3l4); 107 void CreatePVectorDiagnosticHoriz( Vec pg, void* inputs,int analysis_type );108 void CreatePVectorDiagnosticVert( Vec pg, void* inputs,int analysis_type );107 void CreatePVectorDiagnosticHoriz( Vec pg, void* inputs,int analysis_type,int sub_analysis_type); 108 void CreatePVectorDiagnosticVert( Vec pg, void* inputs,int analysis_type,int sub_analysis_type); 109 109 void GetParameterValue(double* pvalue, double* v_list,double* gauss_l1l2l3l4); 110 110 void GetParameterDerivativeValue(double* p, double* p_list,double* xyz_list, double* gauss_l1l2l3l4); … … 113 113 void SlopeExtrude(Vec sg,double* sg_serial); 114 114 void ComputePressure(Vec p_g); 115 void CreateKMatrixSlopeCompute(Mat Kgg,void* vinputs,int analysis_type );116 void CreatePVectorSlopeCompute( Vec pg, void* vinputs, int analysis_type );115 void CreateKMatrixSlopeCompute(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type); 116 void CreatePVectorSlopeCompute( Vec pg, void* vinputs, int analysis_type,int sub_analysis_type); 117 117 118 void CreateKMatrixDiagnosticStokes( Mat Kgg, void* vinputs, int analysis_type );119 void CreatePVectorDiagnosticStokes( Vec pg, void* vinputs,int analysis_type );118 void CreateKMatrixDiagnosticStokes( Mat Kgg, void* vinputs, int analysis_type,int sub_analysis_type); 119 void CreatePVectorDiagnosticStokes( Vec pg, void* vinputs,int analysis_type,int sub_analysis_type); 120 120 void ReduceMatrixStokes(double* Ke_reduced, double* Ke_temp); 121 121 void GetMatrixInvert(double* Ke_invert, double* Ke); -
issm/trunk/src/c/objects/Sing.cpp
r350 r465 193 193 #define __FUNCT__ "Sing::CreateKMatrix" 194 194 195 void Sing::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){195 void Sing::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 196 196 197 197 /*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */ 198 if ( analysis_type==DiagnosticHutterAnalysisEnum()){199 200 CreateKMatrixDiagnosticHutter( Kgg,inputs,analysis_type );198 if ((analysis_type==DiagnosticAnalysisEnum()) && (sub_analysis_type==HutterAnalysisEnum())){ 199 200 CreateKMatrixDiagnosticHutter( Kgg,inputs,analysis_type,sub_analysis_type); 201 201 202 202 } 203 203 else{ 204 throw ErrorException(__FUNCT__,exprintf("%s%i%s \n","analysis: ",analysis_type," not supported yet"));204 throw ErrorException(__FUNCT__,exprintf("%s%i%s%i%s\n","analysis: ",analysis_type," and sub_analysis_type: ",sub_analysis_type," not supported yet")); 205 205 } 206 206 … … 211 211 #define __FUNCT__ "Sing::CreateKMatrixDiagnosticHutter" 212 212 213 void Sing::CreateKMatrixDiagnosticHutter(Mat Kgg,void* vinputs,int analysis_type ){213 void Sing::CreateKMatrixDiagnosticHutter(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type){ 214 214 215 215 const int numgrids=1; … … 234 234 #undef __FUNCT__ 235 235 #define __FUNCT__ "Sing::CreatePVector" 236 void Sing::CreatePVector(Vec pg,void* inputs,int analysis_type ){236 void Sing::CreatePVector(Vec pg,void* inputs,int analysis_type,int sub_analysis_type){ 237 237 238 238 /*Just branch to the correct load generator, according to the type of analysis we are carrying out: */ 239 if (analysis_type==DiagnosticHutterAnalysisEnum()){ 240 CreatePVectorDiagnosticHutter( pg,inputs,analysis_type); 239 if ((analysis_type==DiagnosticAnalysisEnum()) && (sub_analysis_type==HutterAnalysisEnum())){ 240 241 CreatePVectorDiagnosticHutter( pg,inputs,analysis_type,sub_analysis_type); 242 241 243 } 242 244 else{ … … 251 253 #define __FUNCT__ "Sing::CreatePVectorDiagnosticHutter" 252 254 253 void Sing::CreatePVectorDiagnosticHutter( Vec pg, void* vinputs, int analysis_type ){255 void Sing::CreatePVectorDiagnosticHutter( Vec pg, void* vinputs, int analysis_type,int sub_analysis_type){ 254 256 255 257 … … 427 429 #undef __FUNCT__ 428 430 #define __FUNCT__ "Sing::Du" 429 void Sing::Du(_p_Vec*, double*, double*, void*, int ){431 void Sing::Du(_p_Vec*, double*, double*, void*, int,int){ 430 432 throw ErrorException(__FUNCT__," not supported yet!"); 431 433 } 432 434 #undef __FUNCT__ 433 435 #define __FUNCT__ "Sing::Gradj" 434 void Sing::Gradj(_p_Vec*, double*, double*, void*, int, char*){436 void Sing::Gradj(_p_Vec*, double*, double*, void*, int, int ,char*){ 435 437 throw ErrorException(__FUNCT__," not supported yet!"); 436 438 } 437 439 #undef __FUNCT__ 438 440 #define __FUNCT__ "Sing::GradjDrag" 439 void Sing::GradjDrag(_p_Vec*, double*, double*, void*, int ){441 void Sing::GradjDrag(_p_Vec*, double*, double*, void*, int,int){ 440 442 throw ErrorException(__FUNCT__," not supported yet!"); 441 443 } 442 444 #undef __FUNCT__ 443 445 #define __FUNCT__ "Sing::GradjB" 444 void Sing::GradjB(_p_Vec*, double*, double*, void*, int ){446 void Sing::GradjB(_p_Vec*, double*, double*, void*, int,int){ 445 447 throw ErrorException(__FUNCT__," not supported yet!"); 446 448 } 447 449 #undef __FUNCT__ 448 450 #define __FUNCT__ "Sing::Misfit" 449 double Sing::Misfit(double*, double*, void*, int ){451 double Sing::Misfit(double*, double*, void*, int,int){ 450 452 throw ErrorException(__FUNCT__," not supported yet!"); 451 453 } -
issm/trunk/src/c/objects/Sing.h
r308 r465 51 51 int MyRank(); 52 52 void Configure(void* loads,void* nodes,void* materials); 53 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type );54 void CreatePVector(Vec pg, void* inputs, int analysis_type );53 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 54 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 55 55 void UpdateFromInputs(void* inputs); 56 56 void GetDofList(int* doflist,int* pnumberofdofs); 57 57 void GetDofList1(int* doflist); 58 void CreateKMatrixDiagnosticHutter(Mat Kgg,void* inputs,int analysis_type );58 void CreateKMatrixDiagnosticHutter(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 59 59 void GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3); 60 void CreatePVectorDiagnosticHutter(Vec pg,void* inputs,int analysis_type );60 void CreatePVectorDiagnosticHutter(Vec pg,void* inputs,int analysis_type,int sub_analysis_type); 61 61 void* GetMatPar(); 62 62 … … 73 73 void GetBedList(double*); 74 74 void GetThicknessList(double* thickness_list); 75 void Du(_p_Vec*, double*, double*, void*, int );76 void Gradj(_p_Vec*, double*, double*, void*, int, char*);77 void GradjDrag(_p_Vec*, double*, double*, void*, int );78 void GradjB(_p_Vec*, double*, double*, void*, int );79 double Misfit(double*, double*, void*, int );75 void Du(_p_Vec*, double*, double*, void*, int,int); 76 void Gradj(_p_Vec*, double*, double*, void*, int, int,char*); 77 void GradjDrag(_p_Vec*, double*, double*, void*, int,int); 78 void GradjB(_p_Vec*, double*, double*, void*, int,int); 79 double Misfit(double*, double*, void*, int,int); 80 80 81 81 -
issm/trunk/src/c/objects/Tria.cpp
r423 r465 266 266 #define __FUNCT__ "Tria::CreateKMatrix" 267 267 268 void Tria::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type ){268 void Tria::CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type){ 269 269 270 270 /*Just branch to the correct element stiffness matrix generator, according to the type of analysis we are carrying out: */ 271 if ((analysis_type==DiagnosticHorizAnalysisEnum()) || (analysis_type==ControlAnalysisEnum())){ 272 273 CreateKMatrixDiagnosticHoriz( Kgg,inputs,analysis_type); 274 275 } 276 else if ( 277 (analysis_type==SurfaceSlopeComputeXAnalysisEnum()) || 278 (analysis_type==SurfaceSlopeComputeYAnalysisEnum()) || 279 (analysis_type==BedSlopeComputeXAnalysisEnum()) || 280 (analysis_type==BedSlopeComputeYAnalysisEnum()) 281 ){ 282 283 CreateKMatrixSlopeCompute( Kgg,inputs,analysis_type); 271 if (analysis_type==ControlAnalysisEnum()){ 272 273 CreateKMatrixDiagnosticHoriz( Kgg,inputs,analysis_type,sub_analysis_type); 274 } 275 else if (analysis_type==DiagnosticAnalysisEnum()){ 276 277 if (sub_analysis_type==HorizAnalysisEnum()){ 278 279 CreateKMatrixDiagnosticHoriz( Kgg,inputs,analysis_type,sub_analysis_type); 280 } 281 else throw ErrorException(__FUNCT__,exprintf("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet")); 282 283 } 284 else if (analysis_type==SlopeComputeAnalysisEnum()){ 285 286 CreateKMatrixSlopeCompute( Kgg,inputs,analysis_type,sub_analysis_type); 287 284 288 } 285 289 else{ … … 293 297 #define __FUNCT__ "Tria::CreateKMatrixDiagnosticHoriz" 294 298 295 void Tria::CreateKMatrixDiagnosticHoriz(Mat Kgg,void* vinputs,int analysis_type ){299 void Tria::CreateKMatrixDiagnosticHoriz(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type){ 296 300 297 301 … … 477 481 /*Do not forget to include friction: */ 478 482 if(!shelf){ 479 CreateKMatrixDiagnosticHorizFriction(Kgg,inputs,analysis_type );483 CreateKMatrixDiagnosticHorizFriction(Kgg,inputs,analysis_type,sub_analysis_type); 480 484 } 481 485 … … 508 512 #undef __FUNCT__ 509 513 #define __FUNCT__ "Tria::CreateKMatrixDiagnosticHorizFriction" 510 void Tria::CreateKMatrixDiagnosticHorizFriction(Mat Kgg,void* vinputs,int analysis_type ){514 void Tria::CreateKMatrixDiagnosticHorizFriction(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type){ 511 515 512 516 … … 677 681 #define __FUNCT__ "Tria::CreateKMatrixSlopeCompute" 678 682 679 void Tria::CreateKMatrixSlopeCompute(Mat Kgg,void* vinputs,int analysis_type ){683 void Tria::CreateKMatrixSlopeCompute(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type){ 680 684 681 685 /* local declarations */ … … 758 762 #undef __FUNCT__ 759 763 #define __FUNCT__ "Tria::CreatePVector" 760 void Tria::CreatePVector(Vec pg,void* inputs,int analysis_type ){764 void Tria::CreatePVector(Vec pg,void* inputs,int analysis_type,int sub_analysis_type){ 761 765 762 766 /*Just branch to the correct load generator, according to the type of analysis we are carrying out: */ 763 if ((analysis_type==DiagnosticHorizAnalysisEnum()) || (analysis_type==ControlAnalysisEnum())){ 764 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type); 765 } 766 else if ( 767 (analysis_type==SurfaceSlopeComputeXAnalysisEnum()) || 768 (analysis_type==SurfaceSlopeComputeYAnalysisEnum()) || 769 (analysis_type==BedSlopeComputeXAnalysisEnum()) || 770 (analysis_type==BedSlopeComputeYAnalysisEnum()) 771 ){ 772 773 CreatePVectorSlopeCompute( pg,inputs,analysis_type); 767 if (analysis_type==ControlAnalysisEnum()){ 768 769 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type,sub_analysis_type); 770 771 } 772 else if (analysis_type==DiagnosticAnalysisEnum()){ 773 if (sub_analysis_type==HorizAnalysisEnum()){ 774 775 CreatePVectorDiagnosticHoriz( pg,inputs,analysis_type,sub_analysis_type); 776 777 } 778 else throw ErrorException(__FUNCT__,exprintf("%s%i%s\n","sub_analysis: ",sub_analysis_type," not supported yet")); 779 } 780 else if (analysis_type==SlopeComputeAnalysisEnum()){ 781 782 CreatePVectorSlopeCompute( pg,inputs,analysis_type,sub_analysis_type); 774 783 } 775 784 else{ … … 779 788 } 780 789 781 782 783 790 #undef __FUNCT__ 784 791 #define __FUNCT__ "Tria::CreatePVectorDiagnosticHoriz" 785 792 786 void Tria::CreatePVectorDiagnosticHoriz( Vec pg, void* vinputs, int analysis_type ){793 void Tria::CreatePVectorDiagnosticHoriz( Vec pg, void* vinputs, int analysis_type,int sub_analysis_type){ 787 794 788 795 int i,j; … … 952 959 #define __FUNCT__ "Tria::CreatePVectorSlopeCompute" 953 960 954 void Tria::CreatePVectorSlopeCompute( Vec pg, void* vinputs, int analysis_type ){961 void Tria::CreatePVectorSlopeCompute( Vec pg, void* vinputs, int analysis_type,int sub_analysis_type){ 955 962 956 963 int i,j; … … 992 999 for(i=0;i<numdofs;i++) pe_g[i]=0.0; 993 1000 994 if ( ( analysis_type==SurfaceSlopeComputeXAnalysisEnum()) || (analysis_type==SurfaceSlopeComputeYAnalysisEnum())){1001 if ( (sub_analysis_type==SurfaceXAnalysisEnum()) || (sub_analysis_type==SurfaceYAnalysisEnum())){ 995 1002 for(i=0;i<numdofs;i++) param[i]=s[i]; 996 1003 } 997 if ( ( analysis_type==BedSlopeComputeXAnalysisEnum()) || (analysis_type==BedSlopeComputeYAnalysisEnum())){1004 if ( (sub_analysis_type==BedXAnalysisEnum()) || (sub_analysis_type==BedYAnalysisEnum())){ 998 1005 for(i=0;i<numdofs;i++) param[i]=b[i]; 999 1006 } … … 1020 1027 1021 1028 /*Build pe_g_gaussian vector: */ 1022 if ( ( analysis_type==SurfaceSlopeComputeXAnalysisEnum()) || (analysis_type==BedSlopeComputeXAnalysisEnum())){1029 if ( (sub_analysis_type==SurfaceXAnalysisEnum()) || (sub_analysis_type==BedXAnalysisEnum())){ 1023 1030 for(i=0;i<numdofs;i++) pe_g_gaussian[i]=Jdet*gauss_weight*slope[0]*l1l2l3[i]; 1024 1031 } 1025 if ( ( analysis_type==SurfaceSlopeComputeYAnalysisEnum()) || (analysis_type==BedSlopeComputeYAnalysisEnum())){1032 if ( (sub_analysis_type==SurfaceYAnalysisEnum()) || (sub_analysis_type==BedYAnalysisEnum())){ 1026 1033 for(i=0;i<numdofs;i++) pe_g_gaussian[i]=Jdet*gauss_weight*slope[1]*l1l2l3[i]; 1027 1034 } … … 1543 1550 #undef __FUNCT__ 1544 1551 #define __FUNCT__ "Tria::Du" 1545 void Tria::Du(Vec du_g,double* velocity,double* obs_velocity,void* vinputs,int analysis_type ){1552 void Tria::Du(Vec du_g,double* velocity,double* obs_velocity,void* vinputs,int analysis_type,int sub_analysis_type){ 1546 1553 1547 1554 int i; … … 1745 1752 #undef __FUNCT__ 1746 1753 #define __FUNCT__ "Tria::Gradj" 1747 void Tria::Gradj(Vec grad_g,double* velocity,double* adjoint,void* inputs,int analysis_type, char* control_type){1754 void Tria::Gradj(Vec grad_g,double* velocity,double* adjoint,void* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 1748 1755 1749 1756 if (strcmp(control_type,"drag")==0){ 1750 GradjDrag( grad_g,velocity,adjoint,inputs,analysis_type );1757 GradjDrag( grad_g,velocity,adjoint,inputs,analysis_type,sub_analysis_type); 1751 1758 } 1752 1759 else if (strcmp(control_type,"B")==0){ 1753 GradjB( grad_g, velocity, adjoint, inputs,analysis_type );1760 GradjB( grad_g, velocity, adjoint, inputs,analysis_type,sub_analysis_type); 1754 1761 } 1755 1762 else throw ErrorException(__FUNCT__,exprintf("%s%s","control type not supported yet: ",control_type)); … … 1758 1765 #undef __FUNCT__ 1759 1766 #define __FUNCT__ "Tria::GradjDrag" 1760 void Tria::GradjDrag(Vec grad_g,double* velocity,double* adjoint,void* vinputs,int analysis_type ){1767 void Tria::GradjDrag(Vec grad_g,double* velocity,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){ 1761 1768 1762 1769 … … 1952 1959 #undef __FUNCT__ 1953 1960 #define __FUNCT__ "Tria::GradjB" 1954 void Tria::GradjB(Vec grad_g,double* velocity,double* adjoint,void* vinputs,int analysis_type ){1961 void Tria::GradjB(Vec grad_g,double* velocity,double* adjoint,void* vinputs,int analysis_type,int sub_analysis_type){ 1955 1962 1956 1963 int i; … … 2093 2100 #undef __FUNCT__ 2094 2101 #define __FUNCT__ "Tria::Misfit" 2095 double Tria::Misfit(double* velocity,double* obs_velocity,void* vinputs,int analysis_type ){2102 double Tria::Misfit(double* velocity,double* obs_velocity,void* vinputs,int analysis_type,int sub_analysis_type){ 2096 2103 2097 2104 int i; … … 2277 2284 #undef __FUNCT__ 2278 2285 #define __FUNCT__ "Tria::CreateKMatrixDiagnosticSurfaceVert" 2279 void Tria::CreateKMatrixDiagnosticSurfaceVert(Mat Kgg,void* vinputs,int analysis_type ){2286 void Tria::CreateKMatrixDiagnosticSurfaceVert(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type){ 2280 2287 2281 2288 int i,j; … … 2405 2412 #undef __FUNCT__ 2406 2413 #define __FUNCT__ "Tria::CreatePVectorDiagnosticBaseVert" 2407 void Tria::CreatePVectorDiagnosticBaseVert(Vec pg,void* vinputs,int analysis_type ){2414 void Tria::CreatePVectorDiagnosticBaseVert(Vec pg,void* vinputs,int analysis_type,int sub_analysis_type){ 2408 2415 2409 2416 int i,j; -
issm/trunk/src/c/objects/Tria.h
r386 r465 65 65 int MyRank(); 66 66 void Configure(void* loads,void* nodes,void* materials); 67 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type );68 void CreatePVector(Vec pg, void* inputs, int analysis_type );67 void CreateKMatrix(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 68 void CreatePVector(Vec pg, void* inputs, int analysis_type,int sub_analysis_type); 69 69 void UpdateFromInputs(void* inputs); 70 70 void GetDofList(int* doflist,int* pnumberofdofs); 71 71 void GetDofList1(int* doflist); 72 void CreateKMatrixDiagnosticHoriz(Mat Kgg,void* inputs,int analysis_type );73 void CreateKMatrixDiagnosticHorizFriction(Mat Kgg,void* inputs,int analysis_type );74 void CreateKMatrixDiagnosticSurfaceVert(Mat Kgg,void* inputs,int analysis_type );75 void CreateKMatrixSlopeCompute(Mat Kgg,void* vinputs,int analysis_type );72 void CreateKMatrixDiagnosticHoriz(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 73 void CreateKMatrixDiagnosticHorizFriction(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 74 void CreateKMatrixDiagnosticSurfaceVert(Mat Kgg,void* inputs,int analysis_type,int sub_analysis_type); 75 void CreateKMatrixSlopeCompute(Mat Kgg,void* vinputs,int analysis_type,int sub_analysis_type); 76 76 void GetParameterValue(double* pp, double* plist, double* gauss_l1l2l3); 77 77 void GetParameterDerivativeValue(double* p, double* plist,double* xyz_list, double* gauss_l1l2l3); … … 87 87 void GetJacobianInvert(double* Jinv, double* xyz_list,double* gauss_l1l2l3); 88 88 void GetJacobian(double* J, double* xyz_list,double* gauss_l1l2l3); 89 void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type );90 void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type, char* control_type);91 void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type );92 void GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type );93 double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type );89 void Du(Vec du_g,double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type); 90 void Gradj(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type,char* control_type); 91 void GradjDrag(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 92 void GradjB(Vec grad_g,double* u_g,double* lambda_g,void* inputs,int analysis_type,int sub_analysis_type); 93 double Misfit(double* u_g,double* u_g_obs,void* inputs,int analysis_type,int sub_analysis_type); 94 94 95 void CreatePVectorDiagnosticHoriz(Vec pg,void* inputs,int analysis_type );96 void CreatePVectorDiagnosticBaseVert(Vec pg,void* inputs,int analysis_type );97 void CreatePVectorSlopeCompute( Vec pg, void* vinputs, int analysis_type );95 void CreatePVectorDiagnosticHoriz(Vec pg,void* inputs,int analysis_type,int sub_analysis_type); 96 void CreatePVectorDiagnosticBaseVert(Vec pg,void* inputs,int analysis_type,int sub_analysis_type); 97 void CreatePVectorSlopeCompute( Vec pg, void* vinputs, int analysis_type,int sub_analysis_type); 98 98 void* GetMatPar(); 99 99 int GetShelf(); -
issm/trunk/src/c/objects/cielo/PenpairLoad.c
r215 r465 689 689 #undef __FUNCT__ 690 690 #define __FUNCT__ "PenpairLoadPenaltyCreateKMatrix" 691 int PenpairLoadPenaltyCreateKMatrix( ElemMatrix* *pKe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, double kmax, int analysis_type ){691 int PenpairLoadPenaltyCreateKMatrix( ElemMatrix* *pKe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, double kmax, int analysis_type,int sub_analysis_type){ 692 692 693 693 … … 702 702 703 703 if (this->penpair.numdofs==1){ 704 PenpairLoadPenaltyCreateKMatrixOneDof( pKe_gg,vpthis,inputs,K_flag,kmax,analysis_type );704 PenpairLoadPenaltyCreateKMatrixOneDof( pKe_gg,vpthis,inputs,K_flag,kmax,analysis_type,sub_analysis_type); 705 705 } 706 706 else if (this->penpair.numdofs==2){ 707 PenpairLoadPenaltyCreateKMatrixTwoDof( pKe_gg,vpthis,inputs,K_flag,kmax,analysis_type );707 PenpairLoadPenaltyCreateKMatrixTwoDof( pKe_gg,vpthis,inputs,K_flag,kmax,analysis_type,sub_analysis_type); 708 708 } 709 709 else{ … … 719 719 #undef __FUNCT__ 720 720 #define __FUNCT__ "PenpairLoadPenaltyCreateKMatrixOneDof" 721 int PenpairLoadPenaltyCreateKMatrixOneDof( ElemMatrix* *pKe_gg, void* vpthis, ParameterInputs* inptus, int K_flag, double kmax, int analysis_type ){721 int PenpairLoadPenaltyCreateKMatrixOneDof( ElemMatrix* *pKe_gg, void* vpthis, ParameterInputs* inptus, int K_flag, double kmax, int analysis_type,int sub_analysis_type){ 722 722 723 723 … … 769 769 #undef __FUNCT__ 770 770 #define __FUNCT__ "PenpairLoadPenaltyCreateKMatrixTwoDof" 771 int PenpairLoadPenaltyCreateKMatrixTwoDof( ElemMatrix* *pKe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, double kmax, int analysis_type ){771 int PenpairLoadPenaltyCreateKMatrixTwoDof( ElemMatrix* *pKe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, double kmax, int analysis_type,int sub_analysis_type){ 772 772 773 773 … … 916 916 #define __FUNCT__ "PenpairLoadPenaltyCreatePVector" 917 917 918 int PenpairLoadPenaltyCreatePVector( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, double kmax, int analysis_type ){918 int PenpairLoadPenaltyCreatePVector( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, double kmax, int analysis_type,int sub_analysis_type){ 919 919 920 920 PenpairLoad* this = NULL; … … 931 931 } 932 932 else if (this->penpair.numdofs==2){ 933 PenpairLoadPenaltyCreatePVectorTwoDof( ppe_g,vpthis,inputs,kmax,analysis_type );933 PenpairLoadPenaltyCreatePVectorTwoDof( ppe_g,vpthis,inputs,kmax,analysis_type,sub_analysis_type); 934 934 } 935 935 else{ … … 947 947 #define __FUNCT__ "PenpairLoadPenaltyCreatePVectorTwoDof" 948 948 949 int PenpairLoadPenaltyCreatePVectorTwoDof( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, double kmax, int analysis_type ){949 int PenpairLoadPenaltyCreatePVectorTwoDof( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, double kmax, int analysis_type,int sub_analysis_type){ 950 950 951 951 int i,j; … … 1092 1092 return noerr; 1093 1093 } 1094 int PotentialUnstableConstraints(DataSet* lst,ParameterInputs* inputs,int analysis_type_enum);1095 1094 1096 1095 /*-------------------------------------------------- … … 1100 1099 #define __FUNCT__ "PenpairLoadPotentialUnstableConstraint" 1101 1100 1102 int PenpairLoadPotentialUnstableConstraint(int* punstable, void* vpthis,ParameterInputs* inputs, int analysis_type){ 1101 int PotentialUnstableConstraints(DataSet* lst,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 1102 int PenpairLoadPotentialUnstableConstraint(int* punstable, void* vpthis,ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 1103 1103 1104 1104 /* vpthis for polymorphic function compatibility */ … … 1186 1186 #define __FUNCT__ "PenpairLoadPenaltyPreConstrain" 1187 1187 1188 int PenpairLoadPenaltyPreConstrain(int* punstable, void* vpthis,ParameterInputs* inputs, int analysis_type ){1188 int PenpairLoadPenaltyPreConstrain(int* punstable, void* vpthis,ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 1189 1189 1190 1190 /* vpthis for polymorphic function compatibility */ … … 1290 1290 #define __FUNCT__ "PenpairLoadPenaltyConstrain" 1291 1291 1292 int PenpairLoadPenaltyConstrain(int* punstable, void* vpthis,ParameterInputs* inputs, int analysis_type ){1292 int PenpairLoadPenaltyConstrain(int* punstable, void* vpthis,ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 1293 1293 1294 1294 /* vpthis for polymorphic function compatibility */ … … 1417 1417 #define __FUNCT__ "PenpairLoadPenetration" 1418 1418 1419 int PenpairLoadPenetration(double* ppenetration, void* vpthis,ParameterInputs* inputs, int analysis_type ){1419 int PenpairLoadPenetration(double* ppenetration, void* vpthis,ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 1420 1420 1421 1421 /* vpthis for polymorphic function compatibility */ -
issm/trunk/src/c/objects/cielo/PentaElement.c
r216 r465 818 818 #undef __FUNCT__ 819 819 #define __FUNCT__ "PentaElementCreateKMatrix" 820 int PentaElementCreateKMatrix( ElemMatrix* *pKe_gg, ElemMatrix** pKTe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, int KT_flag, int analysis_type ){820 int PentaElementCreateKMatrix( ElemMatrix* *pKe_gg, ElemMatrix** pKTe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, int KT_flag, int analysis_type,int sub_analysis_type){ 821 821 822 822 … … 2564 2564 #define __FUNCT__ "PentaElementCreatePVector" 2565 2565 2566 int PentaElementCreatePVector( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, int analysis_type ){2566 int PentaElementCreatePVector( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 2567 2567 2568 2568 int noerr=1; … … 5002 5002 #undef __FUNCT__ 5003 5003 #define __FUNCT__ "PentaElementCreateDuVector" 5004 int PentaElementCreateDuVector( ElemVector* *pdue_g, void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type ){5004 int PentaElementCreateDuVector( ElemVector* *pdue_g, void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 5005 5005 5006 5006 int noerr=1; … … 5077 5077 5078 5078 /*Ok, now triaelement is correctly configured, call on its method CreateDuVector: */ 5079 noerr=TriaElementCreateDuVector( pdue_g, (void*)triaelement, velocity, obs_velocity, inputs, analysis_type );5079 noerr=TriaElementCreateDuVector( pdue_g, (void*)triaelement, velocity, obs_velocity, inputs, analysis_type,sub_analysis_type); 5080 5080 5081 5081 /*Now delete tria and triaelement: */ … … 5092 5092 #undef __FUNCT__ 5093 5093 #define __FUNCT__ "PentaElementCreateGradVectors" 5094 int PentaElementCreateGradjVectors( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type, char* control_type){5094 int PentaElementCreateGradjVectors( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 5095 5095 5096 5096 int noerr=1; 5097 5097 5098 5098 if strcasecmp_eq(control_type,"drag"){ 5099 noerr=PentaElementCreateGradjVectorsDrag( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type );5099 noerr=PentaElementCreateGradjVectorsDrag( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type,sub_analysis_type); 5100 5100 } 5101 5101 else if strcasecmp_eq(control_type,"B"){ 5102 noerr=PentaElementCreateGradjVectorsB( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type );5102 noerr=PentaElementCreateGradjVectorsB( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type,sub_analysis_type); 5103 5103 } 5104 5104 else{ … … 5114 5114 #undef __FUNCT__ 5115 5115 #define __FUNCT__ "PentaElementMisfit" 5116 int PentaElementMisfit( double* pJelem,void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type ){5116 int PentaElementMisfit( double* pJelem,void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 5117 5117 5118 5118 int noerr=1; … … 5189 5189 5190 5190 /*Ok, now triaelement is correctly configured, call on its method Misfit: */ 5191 noerr=TriaElementMisfit(pJelem,(void*)triaelement, velocity, obs_velocity, inputs, analysis_type );5191 noerr=TriaElementMisfit(pJelem,(void*)triaelement, velocity, obs_velocity, inputs, analysis_type,sub_analysis_type); 5192 5192 5193 5193 /*Now delete tria and triaelement: */ … … 5204 5204 #undef __FUNCT__ 5205 5205 #define __FUNCT__ "PentaElementCreateGradVectorsDrag" 5206 int PentaElementCreateGradjVectorsDrag( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type ){5206 int PentaElementCreateGradjVectorsDrag( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 5207 5207 5208 5208 int noerr=1; … … 5279 5279 5280 5280 /*Ok, now triaelement is correctly configured, call on its method CreateGradjVectorsdrag: */ 5281 noerr=TriaElementCreateGradjVectorsDrag( pgradje_g, (void*)triaelement,velocity, adjoint, inputs,analysis_type );5281 noerr=TriaElementCreateGradjVectorsDrag( pgradje_g, (void*)triaelement,velocity, adjoint, inputs,analysis_type,sub_analysis_type); 5282 5282 5283 5283 /*Now delete tria and triaelement: */ … … 5295 5295 #undef __FUNCT__ 5296 5296 #define __FUNCT__ "PentaElementCreateGradjVectorsB" 5297 int PentaElementCreateGradjVectorsB( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type ){5297 int PentaElementCreateGradjVectorsB( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 5298 5298 5299 5299 printf("Not supported yet!\n"); -
issm/trunk/src/c/objects/cielo/TriaElement.c
r216 r465 777 777 #undef __FUNCT__ 778 778 #define __FUNCT__ "TriaElementCreateKMatrix" 779 int TriaElementCreateKMatrix( ElemMatrix* *pKe_gg, ElemMatrix** pKTe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, int KT_flag, int analysis_type ){779 int TriaElementCreateKMatrix( ElemMatrix* *pKe_gg, ElemMatrix** pKTe_gg, void* vpthis, ParameterInputs* inputs, int K_flag, int KT_flag, int analysis_type,int sub_analysis_type){ 780 780 781 781 … … 800 800 #define __FUNCT__ "TriaElementCreatePVector" 801 801 802 int TriaElementCreatePVector( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, int analysis_type ){802 int TriaElementCreatePVector( ElemVector* *ppe_g, void* vpthis, ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 803 803 804 804 int noerr=1; … … 2044 2044 #undef __FUNCT__ 2045 2045 #define __FUNCT__ "TriaElementCreateDuVector" 2046 int TriaElementCreateDuVector( ElemVector* *pdue_g, void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type ){2046 int TriaElementCreateDuVector( ElemVector* *pdue_g, void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 2047 2047 2048 2048 int i,j; … … 2263 2263 #undef __FUNCT__ 2264 2264 #define __FUNCT__ "TriaElementCreateGradVectors" 2265 int TriaElementCreateGradjVectors( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type, char* control_type){2265 int TriaElementCreateGradjVectors( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type,int sub_analysis_type,char* control_type){ 2266 2266 2267 2267 int noerr=1; 2268 2268 2269 2269 if strcasecmp_eq(control_type,"drag"){ 2270 noerr=TriaElementCreateGradjVectorsDrag( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type );2270 noerr=TriaElementCreateGradjVectorsDrag( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type,sub_analysis_type); 2271 2271 } 2272 2272 else if strcasecmp_eq(control_type,"B"){ 2273 noerr=TriaElementCreateGradjVectorsB( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type );2273 noerr=TriaElementCreateGradjVectorsB( pgradje_g, vpthis, velocity, adjoint, inputs,analysis_type,sub_analysis_type); 2274 2274 } 2275 2275 else{ … … 2285 2285 #undef __FUNCT__ 2286 2286 #define __FUNCT__ "TriaElementCreateGradVectorsDrag" 2287 int TriaElementCreateGradjVectorsDrag( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type ){2287 int TriaElementCreateGradjVectorsDrag( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 2288 2288 2289 2289 int i,j; … … 2566 2566 #undef __FUNCT__ 2567 2567 #define __FUNCT__ "TriaElementCreateGradjVectorsB" 2568 int TriaElementCreateGradjVectorsB( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type ){2568 int TriaElementCreateGradjVectorsB( ElemVector* *pgradje_g, void* vpthis, double* velocity, double* adjoint, ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 2569 2569 2570 2570 int i,j; … … 2770 2770 #undef __FUNCT__ 2771 2771 #define __FUNCT__ "TriaElementMisfit" 2772 int TriaElementMisfit( double* pJelem,void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type ){2772 int TriaElementMisfit( double* pJelem,void* vpthis, double* velocity, double* obs_velocity, ParameterInputs* inputs, int analysis_type,int sub_analysis_type){ 2773 2773 2774 2774 int i,j; -
issm/trunk/src/c/parallel/CreateFemModel.cpp
r464 r465 10 10 #include "../issm.h" 11 11 12 void CreateFemModel(FemModel* femmodel,ConstDataHandle MODEL,char* analysis_type ){12 void CreateFemModel(FemModel* femmodel,ConstDataHandle MODEL,char* analysis_type,char* sub_analysis_type){ 13 13 14 14 /*Model output: */ … … 37 37 _printf_(" specifying analysis\n"); 38 38 model->analysis_type=(char*)xmalloc((strlen(analysis_type)+1)*sizeof(char)); strcpy(model->analysis_type,analysis_type); 39 model->sub_analysis_type=(char*)xmalloc((strlen(sub_analysis_type)+1)*sizeof(char)); strcpy(model->sub_analysis_type,sub_analysis_type); 39 40 40 _printf_(" create elements, nodes and materials:\n"); 41 CreateElementsNodesAndMaterials(&elements,&nodes,&materials,model,MODEL); 42 43 _printf_(" create constraints: \n"); 44 CreateConstraints(&constraints,model,MODEL); 45 46 _printf_(" create loads: \n"); 47 CreateLoads(&loads,model,MODEL); 48 49 _printf_(" create parameters: \n"); 50 CreateParameters(¶meters,model,MODEL); 41 _printf_(" create datasets:\n"); 42 CreateDataSets(&elements,&nodes,&materials,&constraints,&loads,¶meters,model,MODEL); 51 43 52 44 _printf_(" create degrees of freedom: \n"); -
issm/trunk/src/c/parallel/GradJCompute.cpp
r434 r465 20 20 /*intermediary: */ 21 21 int analysis_type; 22 int sub_analysis_type; 22 23 char* solverstring=NULL; 23 24 char* control_type=NULL; … … 42 43 /*some parameters:*/ 43 44 femmodel->parameters->FindParam((void*)&analysis_type,"analysis_type"); 45 femmodel->parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type"); 44 46 femmodel->parameters->FindParam((void*)&solverstring,"solverstring"); 45 47 femmodel->parameters->FindParam((void*)&control_type,"control_type"); 46 48 47 49 _printf_("%s\n"," recover solution for this stiffness and right hand side:"); 48 diagnostic_core_nonlinear(&u_g,&K_ff0,&K_fs0,femmodel,inputs,analysis_type );50 diagnostic_core_nonlinear(&u_g,&K_ff0,&K_fs0,femmodel,inputs,analysis_type,sub_analysis_type); 49 51 VecToMPISerial(&u_g_double,u_g); VecFree(&u_g); 50 52 51 53 _printf_("%s\n"," buid Du, difference between observed velocity and model velocity:"); 52 Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,u_g_double,u_g_obs, inputs,analysis_type );54 Dux( &du_g, femmodel->elements,femmodel->nodes,femmodel->loads,femmodel->materials,u_g_double,u_g_obs, inputs,analysis_type,sub_analysis_type); 53 55 54 56 _printf_("%s\n"," reduce adjoint load from g-set to f-set:"); … … 68 70 69 71 Gradjx( &grad_g, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, 70 u_g_double,lambda_g_double, inputs,analysis_type, control_type);72 u_g_double,lambda_g_double, inputs,analysis_type,sub_analysis_type,control_type); 71 73 72 74 /*Free ressources:*/ -
issm/trunk/src/c/parallel/control.cpp
r434 r465 26 26 char* lockname=NULL; 27 27 int analysis_type; 28 int sub_analysis_type; 28 29 29 30 /*Intermediary: */ … … 78 79 79 80 _printf_("read and create finite element model:\n"); 80 CreateFemModel(&femmodel,fid,"control" );81 CreateFemModel(&femmodel,fid,"control",""); 81 82 82 83 /*Recover parameters used throughout the solution:*/ … … 93 94 femmodel.parameters->FindParam((void*)&u_g_obs,"u_g_obs"); 94 95 femmodel.parameters->FindParam((void*)&analysis_type,"analysis_type"); 96 femmodel.parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type"); 95 97 gsize=femmodel.nodes->NumberOfDofs(); 96 98 … … 156 158 inputs->Add(control_type,p_g,2,numberofnodes); 157 159 inputs->Add("fit",fit[n]); 158 diagnostic_core_nonlinear(&u_g,NULL,NULL,&femmodel,inputs,analysis_type );160 diagnostic_core_nonlinear(&u_g,NULL,NULL,&femmodel,inputs,analysis_type,sub_analysis_type); 159 161 OutputControl(u_g,p_g,J,nsteps,femmodel.partition,outputfilename,femmodel.nodesets); 160 162 _printf_("%s\n"," done."); … … 175 177 UpdateFromInputsx(femmodel.elements,femmodel.nodes,femmodel.loads, femmodel.materials,inputs); 176 178 177 diagnostic_core_nonlinear(&u_g,NULL,NULL,&femmodel,inputs,analysis_type );179 diagnostic_core_nonlinear(&u_g,NULL,NULL,&femmodel,inputs,analysis_type,sub_analysis_type); 178 180 179 181 _printf_("%s\n"," saving final results..."); -
issm/trunk/src/c/parallel/diagnostic.cpp
r458 r465 59 59 _printf_("read and create finite element model:\n"); 60 60 _printf_("\n reading diagnostic horiz model data:\n"); 61 CreateFemModel(&femmodels[0],fid,"diagnostic _horiz");61 CreateFemModel(&femmodels[0],fid,"diagnostic","horiz"); 62 62 _printf_("\n reading diagnostic vert model data:\n"); 63 CreateFemModel(&femmodels[1],fid,"diagnostic _vert");63 CreateFemModel(&femmodels[1],fid,"diagnostic","vert"); 64 64 _printf_("\n reading diagnostic stokes model data:\n"); 65 CreateFemModel(&femmodels[2],fid,"diagnostic _stokes");65 CreateFemModel(&femmodels[2],fid,"diagnostic","stokes"); 66 66 _printf_("\n reading diagnostic hutter model data:\n"); 67 CreateFemModel(&femmodels[3],fid,"diagnostic _hutter");67 CreateFemModel(&femmodels[3],fid,"diagnostic","hutter"); 68 68 _printf_("\n reading surface and bed slope computation model data:\n"); 69 CreateFemModel(&femmodels[4],fid,"slope_compute" );69 CreateFemModel(&femmodels[4],fid,"slope_compute",""); 70 70 71 71 _printf_("initialize inputs:\n"); -
issm/trunk/src/c/parallel/diagnostic_core.cpp
r434 r465 74 74 75 75 if(debug)_printf_("%s\n","computing surface slope (x and y derivatives)..."); 76 diagnostic_core_linear(&slopex,fem_sl,inputs,S urfaceSlopeComputeXAnalysisEnum());77 diagnostic_core_linear(&slopey,fem_sl,inputs,S urfaceSlopeComputeYAnalysisEnum());76 diagnostic_core_linear(&slopex,fem_sl,inputs,SlopeComputeAnalysisEnum(),SurfaceXAnalysisEnum()); 77 diagnostic_core_linear(&slopey,fem_sl,inputs,SlopeComputeAnalysisEnum(),SurfaceYAnalysisEnum()); 78 78 79 79 if (dim==3){ … … 89 89 90 90 if(debug)_printf_("%s\n"," computing hutter velocities..."); 91 diagnostic_core_linear(&ug,fem_dhu,inputs,Diagnostic HutterAnalysisEnum());91 diagnostic_core_linear(&ug,fem_dhu,inputs,DiagnosticAnalysisEnum(),HutterAnalysisEnum()); 92 92 93 93 if(debug)_printf_("%s\n"," computing pressure according to MacAyeal..."); … … 106 106 107 107 if(debug)_printf_("%s\n"," computing horizontal velocities..."); 108 diagnostic_core_nonlinear(&ug,NULL,NULL,fem_dh,inputs,Diagnostic HorizAnalysisEnum());108 diagnostic_core_nonlinear(&ug,NULL,NULL,fem_dh,inputs,DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 109 109 110 110 if(debug)_printf_("%s\n"," computing pressure according to MacAyeal..."); … … 121 121 if(debug)_printf_("%s\n"," computing vertical velocities..."); 122 122 inputs->Add("velocity",ug_horiz,numberofdofspernode_dh,numberofnodes); 123 diagnostic_core_linear(&ug_vert,fem_dv,inputs,Diagnostic VertAnalysisEnum());123 diagnostic_core_linear(&ug_vert,fem_dv,inputs,DiagnosticAnalysisEnum(),VertAnalysisEnum()); 124 124 125 125 if(debug)_printf_("%s\n"," combining horizontal and vertical velocities..."); … … 138 138 139 139 if(debug)_printf_("%s\n","computing bed slope (x and y derivatives)..."); 140 diagnostic_core_linear(&slopex,fem_sl,inputs, BedSlopeComputeXAnalysisEnum());141 diagnostic_core_linear(&slopey,fem_sl,inputs, BedSlopeComputeYAnalysisEnum());140 diagnostic_core_linear(&slopex,fem_sl,inputs,SlopeComputeAnalysisEnum(),BedXAnalysisEnum()); 141 diagnostic_core_linear(&slopey,fem_sl,inputs,SlopeComputeAnalysisEnum(),BedYAnalysisEnum()); 142 142 SlopeExtrudex( slopex, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials); 143 143 SlopeExtrudex( slopey, fem_sl->elements,fem_sl->nodes,fem_sl->loads,fem_sl->materials); … … 160 160 if(debug)_printf_("%s\n"," computing stokes velocities and pressure ..."); 161 161 VecFree(&ug); 162 diagnostic_core_nonlinear(&ug,NULL,NULL,fem_ds,inputs,Diagnostic StokesAnalysisEnum());162 diagnostic_core_nonlinear(&ug,NULL,NULL,fem_ds,inputs,DiagnosticAnalysisEnum(),StokesAnalysisEnum()); 163 163 164 164 //decondition" pressure -
issm/trunk/src/c/parallel/diagnostic_core_linear.cpp
r434 r465 11 11 #include "../issm.h" 12 12 13 void diagnostic_core_linear(Vec* pug,FemModel* fem,ParameterInputs* inputs,int analysis_type ){13 void diagnostic_core_linear(Vec* pug,FemModel* fem,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 14 14 15 15 /*parameters:*/ … … 41 41 //*Generate system matrices 42 42 if (debug) _printf_(" Generating matrices\n"); 43 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type );43 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 44 44 45 45 /*!Reduce matrix from g to f size:*/ -
issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp
r464 r465 11 11 #include "../issm.h" 12 12 13 void diagnostic_core_nonlinear(Vec* pug,Mat* pKff0,Mat* pKfs0, FemModel* fem,ParameterInputs* inputs,int analysis_type ){13 void diagnostic_core_nonlinear(Vec* pug,Mat* pKff0,Mat* pKfs0, FemModel* fem,ParameterInputs* inputs,int analysis_type,int sub_analysis_type){ 14 14 15 15 … … 84 84 if (debug) _printf_(" Generating matrices\n"); 85 85 //*Generate system matrices 86 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type );86 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 87 87 88 88 if (debug) _printf_(" Generating penalty matrices\n"); 89 89 //*Generate penalty system matrices 90 PenaltySystemMatricesx(Kgg, pg,fem->elements,fem->nodes,loads,fem->materials,kflag,pflag,inputs,analysis_type );90 PenaltySystemMatricesx(Kgg, pg,fem->elements,fem->nodes,loads,fem->materials,kflag,pflag,inputs,analysis_type,sub_analysis_type); 91 91 92 92 if (debug) _printf_(" reducing matrix from g to f set\n"); … … 122 122 inputs->Add("velocity",ug,numberofdofspernode,numberofnodes); 123 123 124 PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,loads,fem->materials,inputs,analysis_type );124 PenaltyConstraintsx(&constraints_converged, &num_unstable_constraints, fem->elements,fem->nodes,loads,fem->materials,inputs,analysis_type,sub_analysis_type); 125 125 126 126 //Figure out if convergence is reached. … … 167 167 kflag=1; pflag=0; //stiffness generation only 168 168 169 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type );169 SystemMatricesx(&Kgg, &pg,fem->elements,fem->nodes,fem->loads,fem->materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 170 170 171 171 Reducematrixfromgtofx(&Kff,&Kfs,Kgg,fem->Gmn,fem->nodesets); -
issm/trunk/src/c/parallel/objectivefunctionC.cpp
r434 r465 39 39 double* p_g_copy=NULL; 40 40 int analysis_type; 41 int sub_analysis_type; 41 42 Vec u_g=NULL; 42 43 double* u_g_double=NULL; … … 59 60 femmodel->parameters->FindParam((void*)&fit,"fit"); 60 61 femmodel->parameters->FindParam((void*)&analysis_type,"analysis_type"); 62 femmodel->parameters->FindParam((void*)&sub_analysis_type,"sub_analysis_type"); 61 63 femmodel->parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 62 64 … … 75 77 76 78 //Run diagnostic with updated parameters. 77 diagnostic_core_nonlinear(&u_g,NULL,NULL,femmodel,inputs,analysis_type );79 diagnostic_core_nonlinear(&u_g,NULL,NULL,femmodel,inputs,analysis_type,sub_analysis_type); 78 80 VecToMPISerial(&u_g_double,u_g); VecFree(&u_g); 79 81 … … 81 83 inputs->Add("fit",fit[n]); 82 84 Misfitx( &J, femmodel->elements,femmodel->nodes, femmodel->loads, femmodel->materials, 83 u_g_double,u_g_obs, inputs,analysis_type );85 u_g_double,u_g_obs, inputs,analysis_type,sub_analysis_type); 84 86 85 87 -
issm/trunk/src/c/parallel/parallel.h
r434 r465 12 12 13 13 void diagnostic_core(Vec* pug, Vec* ppg,FemModel* fems, ParameterInputs* inputs); 14 void diagnostic_core_nonlinear(Vec* pug,Mat* pK_ff0,Mat* pK_fs0, FemModel* fem,ParameterInputs* inputs,int analysis_type );15 void diagnostic_core_linear(Vec* ppg,FemModel* fem,ParameterInputs* inputs,int analysis_type );14 void diagnostic_core_nonlinear(Vec* pug,Mat* pK_ff0,Mat* pK_fs0, FemModel* fem,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 15 void diagnostic_core_linear(Vec* ppg,FemModel* fem,ParameterInputs* inputs,int analysis_type,int sub_analysis_type); 16 16 int cielothermal_core(Vec** pt_g,ParameterInputs* inputs,FemModel* femmodel); 17 17 … … 29 29 //int ParameterUpdate(double* search_vector,int step, WorkspaceParams* workspaceparams,BatchParams* batchparams); 30 30 void OutputDiagnostic(Vec u_g,Vec p_g, FemModel* femmodels,char* filename); 31 int OutputThermal(Vec* t_g,Vec* tpartition,char* filename,char* analysis_type );31 int OutputThermal(Vec* t_g,Vec* tpartition,char* filename,char* analysis_type,int sub_analysis_type); 32 32 void OutputControl(Vec u_g,double* p_g, double* J, int nsteps, Vec partition,char* filename,NodeSets* nodesets); 33 33 void WriteLockFile(char* filename); 34 34 35 void CreateFemModel(FemModel* femmodel,ConstDataHandle MODEL,char* analysis_type );35 void CreateFemModel(FemModel* femmodel,ConstDataHandle MODEL,char* analysis_type,char* sub_analysis_type); 36 36 //int BatchDebug(Mat* Kgg,Vec* pg,FemModel* femmodel,char* filename); 37 37 -
issm/trunk/src/c/parallel/thermal.cpp
r386 r465 1 /* 2 * cielothermalsteady.c:3 */ 1 /*!\file: thermal.cpp 2 * \brief: thermal solution 3 */ 4 4 5 #include "../include/cielo.h" 6 #include "../modules.h" 5 #include "../issm.h" 7 6 #include "./parallel.h" 8 7 9 8 #undef __FUNCT__ 10 #define __FUNCT__ "cielothermalsteady" 9 #define __FUNCT__ "thermal" 10 11 #ifdef HAVE_CONFIG_H 12 #include "config.h" 13 #else 14 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" 15 #endif 11 16 12 17 int main(int argc,char* *argv){ 13 18 14 19 /*I/O: */ 15 20 FILE* fid=NULL; … … 17 22 char* outputfilename=NULL; 18 23 char* lockname=NULL; 19 char* analysis_type_t="thermalsteady"; 20 char* analysis_type_m="melting"; 24 int numberofnodes; 21 25 22 /*Intermediary: */ 26 /*Fem models : */ 27 FemModel femmodels[2]; 28 29 /*initial velocity and pressure: */ 30 Vec u_g=NULL; 31 Vec p_g=NULL; 32 23 33 24 #if defined(_PARALLEL_) && defined(_HAVE_PETSC_)25 FemModel femmodel_t;26 FemModel femmodel_m; Vec* t_g=NULL;27 #endif 34 /*solution vectors: */ 35 Vec t_g=NULL; 36 Vec m_g=NULL; 37 28 38 ParameterInputs* inputs=NULL; 39 int waitonlock=0; 40 41 MODULEBOOT(); 29 42 30 43 #if !defined(_PARALLEL_) || (defined(_PARALLEL_) && !defined(_HAVE_PETSC_)) 31 _printf_("%s%s\n",__FUNCT__," error message: parallel executable was compiled without support of parallel libraries!"); 32 return 1; 33 #else 44 throw ErrorException(__FUNCT__," parallel executable was compiled without support of parallel libraries!"); 45 #endif 34 46 35 /*Initialize MPI environment: */ 36 PetscInitialize(&argc,&argv,(char *)0,""); 47 PetscInitialize(&argc,&argv,(char *)0,""); 37 48 38 39 40 49 /*Size and rank: */ 50 MPI_Comm_rank(MPI_COMM_WORLD,&my_rank); 51 MPI_Comm_size(MPI_COMM_WORLD,&num_procs); 41 52 42 /*Some checks on size of cluster*/ 43 if (num_procs<=1){ 44 _printf_("\nSize of MPI COMM WORLD is 1, needs to be at least 2. Include more nodes\n"); 45 PetscFinalize(); 46 return 0; 47 } 53 _printf_("recover , input file name and output file name:\n"); 54 inputfilename=argv[2]; 55 outputfilename=argv[3]; 56 lockname=argv[4]; 48 57 49 /*Recover dbdir, input file name and output file name: */ 50 dbdir=argv[1]; 51 inputfilename=argv[2]; 52 outputfilename=argv[3]; 53 lockname=argv[4]; 58 /*Open handle to data on disk: */ 59 fid=fopen(inputfilename,"rb"); 60 if(fid==NULL) throw ErrorException(__FUNCT__,exprintf("%s%s%s","could not open file ",inputfilename," for binary reading")); 54 61 62 _printf_("read and create finite element model:\n"); 63 CreateFemModel(&femmodels[0],fid,"thermal",""); 64 CreateFemModel(&femmodels[1],fid,"melting",""); 65 66 _printf_("initialize inputs:\n"); 67 femmodels[0].parameters->FindParam((void*)&u_g,"u_g"); 68 femmodels[0].parameters->FindParam((void*)&p_g,"p_g"); 69 femmodels[0].parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 70 71 inputs=new ParameterInputs; 72 //inputs->Add("velocity",u_g_initial,3,numberofnodes); 73 74 //erase velocities: 75 //param=(Param*)femmodels[0].parameters->FindParamObject("u_g"); 76 //femmodels[0].parameters->DeleteObject((Object*)param); 77 78 _printf_("call computational core:\n"); 79 diagnostic_core(&u_g,&p_g,femmodels,inputs); 80 81 _printf_("write results to disk:\n"); 82 OutputDiagnostic(u_g,p_g,&femmodels[0],outputfilename); 83 84 _printf_("write lock file:\n"); 85 femmodels[0].parameters->FindParam((void*)&waitonlock,"waitonlock"); 86 if (waitonlock){ 87 WriteLockFile(lockname); 88 } 55 89 56 57 /*Read and create thermal finite element model: */ 58 fid=fopen(inputfilename,"rb"); 59 if(fid==NULL){ 60 _printf_("%s%s\n",__FUNCT__," error message: could not open file ",inputfilename," for binary reading"); 61 return 0; 62 } 63 if(!CreateFemModel(&femmodel_t,fid,analysis_type_t)){ 64 _printf_("%s\n",__FUNCT__," error message: could not read melting finite element model!\n"); 65 return 0; 66 } 67 fclose(fid); 90 _printf_("closing MPI and Petsc\n"); 91 MPI_Barrier(MPI_COMM_WORLD); 68 92 69 /*Read and create melting finite element model: */ 70 fid=fopen(inputfilename,"rb"); 71 if(!CreateFemModel(&femmodel_m,fid,analysis_type_m)){ 72 _printf_("%s\n",__FUNCT__," error message: could not read thermal finite element model!\n"); 73 return 0; 74 } 75 fclose(fid); 93 /*Close MPI libraries: */ 94 PetscFinalize(); 76 95 77 /*Initialize inputs: */78 inputs=NewParameterInputs();79 80 ParameterInputsAddFromMat(inputs,WorkspaceParamsGetVelocity(femmodel_t.workspaceparams),femmodel_t.workspaceparams->gsize,"velocity");81 ParameterInputsAddFromMat(inputs,WorkspaceParamsGetPressure(femmodel_t.workspaceparams),femmodel_t.workspaceparams->gsize,"pressure");82 96 83 ParameterInputsAddFromMat(inputs,&femmodel_t.batchparams->dt,1,"dt"); 84 85 /*Call computational core: */ 86 if(!cielothermal_core(&t_g,inputs,&femmodel_t)){ 87 _printf_("%s\n",__FUNCT__," error message: could not run computational core!\n"); 88 return 0; 89 } 90 91 /*Write results to disk: */ 92 OutputThermal(t_g,femmodel_t.tpartition,outputfilename,analysis_type_t); 93 94 /*Write lock file if requested: */ 95 if (femmodel_t.batchparams->waitonlock){ 96 WriteLockFile(lockname); 97 } 98 99 cleanup_and_return: 100 _printf_("done.\n"); 101 102 /*Synchronize everyone before exiting: */ 103 MPI_Barrier(MPI_COMM_WORLD); 104 105 /*Close MPI libraries: */ 106 PetscFinalize(); 107 108 return 0; //unix success return; 109 110 #endif 97 /*end module: */ 98 MODULEEND(); 99 100 return 0; //unix success return; 111 101 } 102 -
issm/trunk/src/c/shared/Dofs/dofs.h
r434 r465 7 7 8 8 double* dofsetgen(int numdofs,int* doflist,int dofspernode,int totaldofs); 9 int DistributeNumDofs(int *pnumdofs,int analysis_type,int sub_analysis_type); 9 10 10 11 -
issm/trunk/src/c/shared/Numerics/OptFunc.cpp
r377 r465 23 23 double J; 24 24 25 mxArray* inputs[ 8];25 mxArray* inputs[9]; 26 26 mxArray* psearch_scalar=NULL; 27 27 mxArray* mxJ=NULL; … … 30 30 psearch_scalar=mxCreateDoubleScalar(scalar); 31 31 inputs[0]=psearch_scalar; 32 33 32 inputs[1]=optargs->m; 34 33 inputs[2]=optargs->inputs; … … 38 37 inputs[6]=optargs->n; 39 38 inputs[7]=optargs->analysis_type; 39 inputs[8]=optargs->sub_analysis_type; 40 40 41 mexCallMATLAB( 1, &mxJ, 8, (mxArray**)inputs, optargs->function_name);41 mexCallMATLAB( 1, &mxJ, 9, (mxArray**)inputs, optargs->function_name); 42 42 43 43 /*extract misfit from mxArray*/ -
issm/trunk/src/c/shared/Numerics/numerics.h
r117 r465 15 15 void cross(double* result,double* vector1,double* vector2); 16 16 double norm(double* vector); 17 int DistributeNumDofs(int *pnumdofs,int analysis_type);18 17 19 18 #endif //ifndef _NUMERICS_H_ -
issm/trunk/src/m/classes/@model/model.m
r387 r465 255 255 md.solverstring=''; 256 256 md.analysis_type=''; 257 md.sub_analysis_type=''; 257 258 258 259 %management of large models -
issm/trunk/src/m/classes/public/BuildQueueingScript.m
r1 r465 1 function BuildQueueingScript(md, solutiontype,executionpath,codepath)1 function BuildQueueingScript(md,executionpath,codepath) 2 2 %BUILDQUEUEINGSCRIPT - 3 3 % 4 4 % Usage: 5 % BuildQueueingScript(md, solutiontype,executionpath,codepath)5 % BuildQueueingScript(md,executionpath,codepath) 6 6 7 7 disp('building queueing script'); … … 11 11 if exist(function_name,'file'), 12 12 %Call this function: 13 eval([function_name '(md, solutiontype,executionpath,codepath);']);13 eval([function_name '(md,executionpath,codepath);']); 14 14 else 15 15 %Call the generic BuildQueueingScript: 16 BuildQueueingScriptGeneric(md, solutiontype,executionpath,codepath);16 BuildQueueingScriptGeneric(md,executionpath,codepath); 17 17 end -
issm/trunk/src/m/classes/public/BuildQueueingScriptGeneric.m
r1 r465 1 function BuildQueueingScriptGeneric(md, solutiontype,executionpath,codepath)1 function BuildQueueingScriptGeneric(md,executionpath,codepath) 2 2 %BUILDQUEUEINGSCRIPTGENERIC - ... 3 3 % … … 17 17 fprintf(fid,'mpirun -np %i ',md.np); 18 18 19 if strcmpi( solutiontype,'diagnostic_horiz') | strcmpi(solutiontype,'diagnostic'),19 if strcmpi(md.analysis_type,'diagnostic'), 20 20 fprintf(fid,'%s/diagnostic.exe',codepath); 21 elseif strcmpi( solutiontype,'control'),21 elseif strcmpi(md.analysis_type,'control'), 22 22 fprintf(fid,'%s/control.exe',codepath); 23 elseif strcmpi( solutiontype,'thermalsteady'),24 fprintf(fid,'%s/thermal steady.exe',codepath);23 elseif strcmpi(md.analysis_type,'thermal'), 24 fprintf(fid,'%s/thermal.exe',codepath); 25 25 else 26 26 error('BuildQueueingScriptGeneric error message: unsupported solution type!'); 27 27 end 28 28 29 30 29 fprintf(fid,' %s %s.bin %s.outbin %s.lock 2> %s.errlog >%s.outlog & ',executionpath,md.name,md.name,md.name,md.name,md.name); 31 30 fclose(fid); -
issm/trunk/src/m/classes/public/BuildQueueingScriptcosmos.m
r1 r465 2 2 %BUILDQUEUEINGSCRIPTCOSMOS - build queueing script for batch system when running parallel 3 3 % 4 % solutiontype is 'diagnostic','prognostic','transient','thermal steady','thermaltransient','parameters' or 'control'4 % solutiontype is 'diagnostic','prognostic','transient','thermal','parameters' or 'control' 5 5 % and varargin is an optional package name ('cielo', 'ice' or 'macayeal') 6 6 % … … 38 38 fprintf(fid,'mpirun.lsf /home/larour/bin/alloc_cleanup.exe\n'); 39 39 end 40 if strcmpi(solutiontype,'diagnostic _horiz') | strcmpi(solutiontype,'diagnostic'),40 if strcmpi(solutiontype,'diagnostic'), 41 41 fprintf(fid,'mpirun.lsf %s/diagnostic.exe %s %s.bin %s.outbin %s.lock',codepath,executionpath,md.name,md.name,md.name); 42 42 elseif strcmpi(solutiontype,'control') , 43 43 fprintf(fid,'mpirun.lsf %s/control.exe %s %s.bin %s.outbin %s.lock',codepath,executionpath,md.name,md.name,md.name); 44 elseif strcmpi(solutiontype,'thermal steady') ,45 fprintf(fid,'mpirun.lsf %s/thermal steady.exe %s %s.bin %s.outbin %s.lock',codepath,executionpath,md.name,md.name,md.name);44 elseif strcmpi(solutiontype,'thermal') , 45 fprintf(fid,'mpirun.lsf %s/thermal.exe %s %s.bin %s.outbin %s.lock',codepath,executionpath,md.name,md.name,md.name); 46 46 else 47 error('BuildQueueingScriptcosm soerror message: unsupported solution type!');47 error('BuildQueueingScriptcosmos error message: unsupported solution type!'); 48 48 end 49 49 fclose(fid); -
issm/trunk/src/m/classes/public/BuildQueueingScriptgemini.m
r1 r465 22 22 fprintf(fid,'rm -rf %s.outlog %s.errlog %s.lock\n',md.name,md.name,md.name); 23 23 24 if strcmpi(solutiontype,'diagnostic _horiz') | strcmpi(solutiontype,'diagnostic'),24 if strcmpi(solutiontype,'diagnostic') , 25 25 fprintf(fid,'mpirun -np %i %s/diagnostic.exe %s %s.bin %s.outbin %s.lock',md.np,codepath,executionpath,md.name,md.name,md.name); 26 26 elseif strcmpi(solutiontype,'control') , 27 27 fprintf(fid,'mpirun -np %i %s/control.exe %s %s.bin %s.outbin %s.lock',md.np,codepath,executionpath,md.name,md.name,md.name); 28 elseif strcmpi(solutiontype,'thermal steady') ,29 fprintf(fid,'mpirun -np %i %s/thermal steady.exe %s %s.bin %s.outbin %s.lock',md.np,codepath,executionpath,md.name,md.name,md.name);28 elseif strcmpi(solutiontype,'thermal') , 29 fprintf(fid,'mpirun -np %i %s/thermal.exe %s %s.bin %s.outbin %s.lock',md.np,codepath,executionpath,md.name,md.name,md.name); 30 30 else 31 31 error('BuildQueueingScriptgemini error message: unsupported solution type!'); -
issm/trunk/src/m/classes/public/ismodelselfconsistent.m
r440 r465 1 function bool=ismodelselfconsistent(md, solutiontype,package),1 function bool=ismodelselfconsistent(md,package), 2 2 %ISMODELSELFCONSISTENT - check that model forms a closed form solvable problem. 3 3 % 4 4 % Usage: 5 % bool=ismodelselfconsistent(md, solutiontype,package),5 % bool=ismodelselfconsistent(md,package), 6 6 7 7 %tolerance we use in litmus tests for the consistency of the model 8 8 tolerance=10^-12; 9 if (nargin~= 3)9 if (nargin~=2 ) 10 10 help ismodelselfconsistent 11 11 error('ismodelselfconsistent error message: wrong usage'); … … 115 115 116 116 %SIZE NUMBEROFGRIDS 117 fields={'x','y','z','B','drag','gridondirichlet_diag','melting','accumulation','surface','thickness','bed','gridonbed','gridonsurface' ,'deadgrids'};117 fields={'x','y','z','B','drag','gridondirichlet_diag','melting','accumulation','surface','thickness','bed','gridonbed','gridonsurface'}; 118 118 for i=1:length(fields), 119 119 if find(length(eval(['md.' char(fields(i))]))~=md.numberofgrids), … … 159 159 160 160 %DIAGNOSTIC 161 if strcmpi( solutiontype,'diagnostic')161 if strcmpi(md.analysis_type,'diagnostic') 162 162 163 163 %HUTTER ON ICESHELF WARNING … … 189 189 190 190 %PROGNOSTIC 191 if strcmp( solutiontype,'prognostic'),191 if strcmp(md.analysis_type,'prognostic'), 192 192 %old testing 193 193 % if isempty(find(md.gridondirichlet_diag)), … … 208 208 209 209 %THERMAL TRANSIENT 210 if strcmp(solutiontype,'thermaltransient') 211 212 %INITIAL TEMPERATURE, MELTING AND ACCUMULATION 213 if isempty(md.temperature), 214 disp(['An initial temperature is needed for a transient thermal computation']) 215 bool=0;return; 216 end 217 if isstruct(md.temperature) | isstruct(md.melting) | isstruct(md.accumulation), 218 disp(['The initial temperature, melting or accumulation should be a list and not a structure']) 219 bool=0;return; 210 if strcmp(md.analysis_type,'thermal') 211 if strcmp(md.sub_analysis_type,'transient') 212 213 %INITIAL TEMPERATURE, MELTING AND ACCUMULATION 214 if isempty(md.temperature), 215 disp(['An initial temperature is needed for a transient thermal computation']) 216 bool=0;return; 217 end 218 if isstruct(md.temperature) | isstruct(md.melting) | isstruct(md.accumulation), 219 disp(['The initial temperature, melting or accumulation should be a list and not a structure']) 220 bool=0;return; 221 end 220 222 end 221 223 end 222 224 223 225 %THERMAL STEADY AND THERMAL TRANSIENT 224 if strcmpi( solutiontype,'thermalsteady') | strcmp(solutiontype,'thermaltransient'),226 if strcmpi(md.analysis_type,'thermal'), 225 227 226 228 %EXTRUSION 227 229 if strcmp(md.type,'2d'), 228 disp(['For a ' solutiontype ' computation, the model must be 3d, extrude it first!'])230 disp(['For a ' md.analysis_type ' computation, the model must be 3d, extrude it first!']) 229 231 bool=0;return; 230 232 end … … 242 244 243 245 %THERMAL TRANSIENT AND TRANSIENT 244 if strcmp( solutiontype,'thermaltransient') | strcmp(solutiontype,'transient'),246 if strcmp(md.analysis_type,'thermal'), 245 247 246 248 %DT and NDT … … 261 263 262 264 %PARAMETERS 263 if strcmp( solutiontype,'parameters')265 if strcmp(md.analysis_type,'parameters') 264 266 265 267 %OUTPUT … … 289 291 290 292 %CONTROL 291 if strcmpi( solutiontype,'control'),293 if strcmpi(md.analysis_type,'control'), 292 294 293 295 %CONTROL TYPE … … 320 322 321 323 %QMU 322 if strcmpi( solutiontype,'qmu'),324 if strcmpi(md.analysis_type,'qmu'), 323 325 if ~strcmpi(md.cluster,'none'), 324 326 if md.waitonlock==0, … … 330 332 331 333 %MESH 332 if strcmpi( solutiontype,'mesh'),334 if strcmpi(md.analysis_type,'mesh'), 333 335 %this solution is a little special. It should come right after the md=model; operation. So a lot less checks! 334 336 … … 338 340 339 341 %MESH2GRID 340 if strcmpi( solutiontype,'mesh2grid'),342 if strcmpi(md.analysis_type,'mesh2grid'), 341 343 if ~strcmpi(md.cluster,'none'), 342 344 disp(['model is not correctly configured: mesh2grid not supported in parallel yet!']); -
issm/trunk/src/m/classes/public/isresultconsistent.m
r27 r465 1 function bool=isresultconsistent(md ,solutiontype),1 function bool=isresultconsistent(md) 2 2 %ISRESULTCONSISTENT: check that results are consistent 3 3 % … … 6 6 % 7 7 % Usage: 8 % bool=IsModelSelfConsistent(model ,solutiontype)8 % bool=IsModelSelfConsistent(model) 9 9 10 10 %tolerance we use in litmus tests for the consistency of the model 11 11 tolerance=10^-2; 12 12 13 if (nargin~= 2)13 if (nargin~=1 ) 14 14 IsResultConsistentUsage(); 15 15 error(' '); 16 16 end 17 17 %Check velocities i(no penalties for 2d meshes) 18 if (strcmp(solutiontype,'diagnostic') || strcmp(solutiontype,'diagnostic_horiz')),18 if strcmp(md.analysis_type,'diagnostic'), 19 19 20 20 if strcmpi(md.type,'3d'), … … 37 37 end 38 38 39 if strcmp( solutiontype,'thermalsteady')39 if strcmp(md.analysis_type,'thermal') 40 40 41 41 %check melting 42 42 if any(abs(md.melting(md.numberofgrids2d+1:end))>tolerance) 43 disp(['''thermal steady'' result not consistent: increase penalty_melting (negative melting)']);43 disp(['''thermal'' result not consistent: increase penalty_melting (negative melting)']); 44 44 bool=0; return; 45 45 end … … 47 47 end 48 48 49 if strcmp( solutiontype,'thermaltransient')49 if strcmp(md.analysis_type,'thermaltransient') 50 50 51 51 for iter=1:length(md.thermaltransient_results) … … 61 61 62 62 63 if (strcmp( solutiontype,'transient') & strcmpi(md.type,'3d')),63 if (strcmp(md.analysis_type,'transient') & strcmpi(md.type,'3d')), 64 64 for iter=1:length(md.transient_results) 65 65 … … 99 99 function IsResultConsistentUsage() 100 100 disp(' '); 101 disp(' IsResultConsistent usage: flag=IsResultConsistent(model ,solutiontype)');101 disp(' IsResultConsistent usage: flag=IsResultConsistent(model)'); 102 102 disp(' where model is an instance of the @model class, and flag a boolean'); -
issm/trunk/src/m/classes/public/loadresultsfromcluster.m
r227 r465 1 function md=loadresultsfromcluster(md ,solutiontype)1 function md=loadresultsfromcluster(md) 2 2 %LOADRESULTSFROMCLUSTER - load results of solution sequence from cluster 3 3 % 4 4 % Usage: 5 % md=loadresultsfromcluster(md ,solutiontype);5 % md=loadresultsfromcluster(md); 6 6 7 7 %Get cluster.rc location … … 31 31 32 32 %If we are here, no errors in the solution sequence, call loadresultsfromdisk. 33 md=loadresultsfromdisk(md,[md.name '.outbin'], solutiontype);33 md=loadresultsfromdisk(md,[md.name '.outbin'],md.analysis_type); 34 34 35 35 %erase the log and output files -
issm/trunk/src/m/classes/public/loadresultsfromdisk.m
r460 r465 1 function md=loadresultsfromdisk(md,filename ,solutiontype)1 function md=loadresultsfromdisk(md,filename) 2 2 %LOADRESULTSFROMDISK - load results of solution sequence from disk file "filename" 3 3 % … … 103 103 disp(sprintf('%s\n','checking result consistency')); 104 104 105 if ~isresultconsistent(md ,solutiontype),105 if ~isresultconsistent(md), 106 106 disp('!! results not consistent correct the model !!') %it would be very cruel to put an error, it would kill the computed results (even if not consistent...) 107 107 end -
issm/trunk/src/m/classes/public/marshall.m
r381 r465 1 function marshall(md ,solutiontype,package)1 function marshall(md) 2 2 %MARSHALL - output Cielo compatible binary file from @model md, for certain solution type. 3 3 % 4 4 % The routine creates a Cielo compatible binary file from @model md 5 % solutiontype can be 'diagnostic','prognostic' or 'control'.6 5 % This binary file will be used for parallel runs in cielo. 7 6 % 8 7 % Usage: 9 % marshall(md ,solutiontype,package)8 % marshall(md) 10 9 11 10 %some checks on list of arguments … … 23 22 end 24 23 25 if strcmp(solutiontype,'diagnostic'), 26 WriteData(fid,'diagnostic_horiz','String','analysis_type'); 27 else 28 WriteData(fid,solutiontype,'String','analysis_type'); 29 end 24 WriteData(fid,md.analysis_type','String','analysis_type'); 25 WriteData(fid,md.sub_analysis_type','String','sub_analysis_type'); 30 26 WriteData(fid,md.type,'String','type'); 31 27 WriteData(fid,md.numberofgrids,'Integer','numberofgrids'); -
issm/trunk/src/m/classes/public/solve.m
r309 r465 1 function md=solve(md, solutiontype,varargin)1 function md=solve(md,varargin) 2 2 %SOLVE - apply solution sequence for this model 3 3 % 4 % solutiontype is 'diagnostic','prognostic','transient','thermalsteady','thermaltransient','parameters' or 'control'5 % and varargin is an optional package name ('cielo', 'ice' or 'macayeal')6 %7 4 % Usage: 8 % md=solve(md,solutiontype,varargin) 5 % md=solve(md,varargin) 6 % where varargin is a lit of paired arguments. 7 % arguments can be: 'analysis_type': 'diagnostic','thermal','prognostic','transient' 8 % arguments can be: 'sub_analysis_type': 'transient','' 9 % arguments can be: 'package': 'macayeal','ice','cielo' 9 10 % 10 11 % Examples: 11 % md=solve(md,'diagnostic','macayeal'); 12 % md=solve(md,'control','cielo'); 12 % md=solve(md,'analysis_type','diagnostic','package','cielo'); 13 % md=solve(md,'analysis_type','control','package','ice'); 14 % md=solve(md,'analysis_type','thermal','sub_analysis_type','transient','package','ice'); 15 % md=solve(md,'analysis_type','thermal','sub_analysis_type','','package','cielo'); 13 16 14 17 %some checks on list of arguments 15 16 18 global ISSM_DIR 17 19 18 solutions={'mesh2grid','mesh','thermaltransient','thermalsteady','qmu','diagnostic','diagnostic_horiz','prognostic','transient','parameters','control'}; 19 found=0; 20 for i=1:length(solutions), 21 if strcmpi(solutiontype,solutions{i}), 22 found=1; 23 break; 24 end 25 end 20 %recover options 21 options=recover_solve_options(md,varargin{:}); 26 22 27 if found==0, 28 error(['solve error message: solution type ' solutiontype ' not supported yet!']); 29 end 23 %add default options 24 options=process_solve_options(options); 30 25 31 %we are good with this solutiontype, put in the analysis_type field of md: 32 md.analysis_type=solutiontype; 33 34 %Recover type of package being used: 35 if nargin==2, 36 package='Ice'; 37 else 38 package=varargin{1}; 39 end 40 41 if ~ischar(package), 42 error('Package specified in varargin can only be ''ice'', or ''cielo'''); 43 end 44 45 if ~(strcmpi(package,'ice') || strcmpi(package,'cielo') || strcmpi(package,'macayeal')) 46 error('Package specified in varargin can only be ''ice'', ''macayeal'', or ''cielo'''); 47 end 26 %recover some fields 27 md.analysis_type=options.analysis_type; 28 md.sub_analysis_type=options.sub_analysis_type; 29 package=options.package; 48 30 49 31 %Use package to set solution namespace 50 32 usenamespace(package); 51 33 52 if ~ismodelselfconsistent(md, solutiontype,package),53 34 if ~ismodelselfconsistent(md,package), 35 error(' '); %previous error messages should explain what is going on. 54 36 end 55 37 56 38 displaystring(md.debug,'\n%s\n','launching solution sequence'); 57 39 40 58 41 %If running in parallel, we have a different way of launching the solution 59 %sequences. 60 if ~strcmpi( solutiontype,'qmu'),42 %sequences. qmu is the only solution sequence that cannot run in parallel 43 if ~strcmpi(md.analysis_type,'qmu'), 61 44 if ~strcmpi(md.cluster,'none'), 62 md=solveparallel(md ,solutiontype,package);45 md=solveparallel(md) 63 46 return; 64 47 end … … 66 49 67 50 %Lauch correct solution sequence 68 if strcmpi( solutiontype,'diagnostic'),51 if strcmpi(md.analysis_type,'diagnostic'), 69 52 md=diagnostic(md); 70 53 71 elseif strcmpi( solutiontype,'mesh'),54 elseif strcmpi(md.analysis_type,'mesh'), 72 55 md=mesh(md); 73 56 74 elseif strcmpi( solutiontype,'transient'),57 elseif strcmpi(md.analysis_type,'transient'), 75 58 md=transient(md); 76 59 77 elseif strcmpi( solutiontype,'qmu'),60 elseif strcmpi(md.analysis_type,'qmu'), 78 61 md=qmu(md,package); 79 62 80 elseif strcmpi(solutiontype,'parameters'), 81 md=parameters(md);; 82 83 elseif strcmpi(solutiontype,'mesh2grid'), 63 elseif strcmpi(md.analysis_type,'mesh2grid'), 84 64 md=mesh2grid(md);; 85 65 86 elseif strcmpi( solutiontype,'prognostic'),66 elseif strcmpi(md.analysis_type,'prognostic'), 87 67 md=prognostic(md);; 88 68 89 elseif strcmpi( solutiontype,'control'),69 elseif strcmpi(md.analysis_type,'control'), 90 70 md=control(md); 91 71 92 elseif strcmpi( solutiontype,'thermalsteady') | strcmpi(solutiontype,'thermaltransient'),93 md=thermal(md ,solutiontype);72 elseif strcmpi(md.analysis_type,'thermal'), 73 md=thermal(md); 94 74 else 95 75 error('solution type not supported for this model configuration.'); … … 98 78 %Check result is consistent 99 79 displaystring(md.debug,'%s\n','checking result consistency'); 100 if ~isresultconsistent(md ,solutiontype),80 if ~isresultconsistent(md), 101 81 disp('!! results not consistent correct the model !!') %it would be very cruel to put an error, it would kill the computed results (even if not consistent...) 102 82 end … … 110 90 function solveusage(); 111 91 disp(' '); 112 disp(' Solve usage: md=solve(md, solutiontype,package)');113 disp(' solutiontype can be ''diagnostic'',''transient'', ''thermalsteady'',''thermaltransient'',''parameters'',''mesh2grid'' or ''control''');92 disp(' Solve usage: md=solve(md,md.analysis_type,package)'); 93 disp(' md.analysis_type can be ''diagnostic'',''transient'', ''thermal'',''thermaltransient'',''parameters'',''mesh2grid'' or ''control'''); 114 94 disp(' package is either ''cielo'' or ''ice'''); -
issm/trunk/src/m/classes/public/solveparallel.m
r227 r465 1 function md=solveparallel(md ,solutiontype,varargin)1 function md=solveparallel(md) 2 2 %SOLVEPARALLEL - solution sequence using a cluster in parallel mode 3 3 % 4 4 % Usage: 5 % md=solveparallel(md,solutiontype,varargin) 6 7 %Recover type of package being used: 8 if nargin==2, 9 package='Ice'; 10 else 11 package=varargin{1}; 12 end 13 14 if ~ischar(package), 15 error('Package specified in varargin can only be ''ice'', or ''cielo'''); 16 end 17 18 if ~(strcmpi(package,'ice') || strcmpi(package,'cielo') || strcmpi(package,'macayeal')) 19 error('Package specified in varargin can only be ''ice'', ''macayeal'', or ''cielo'''); 20 end 5 % md=solveparallel(md); 21 6 22 7 %Get cluster.rc location … … 27 12 28 13 %Marshall model data into a binary file. 29 marshall(md ,solutiontype,package);14 marshall(md); 30 15 31 16 %Now, we need to build the queuing script, used by the cluster to launch the job. 32 BuildQueueingScript(md, solutiontype,executionpath,codepath);17 BuildQueueingScript(md,executionpath,codepath); 33 18 34 19 %Now, launch the queueing script … … 40 25 waitonlock([executionpath '/' md.name '.lock']); 41 26 %load results 42 md=loadresultsfromcluster(md ,solutiontype);27 md=loadresultsfromcluster(md); 43 28 else 44 29 return; -
issm/trunk/src/m/solutions/cielo/GradJCompute.m
r422 r465 1 function [u_g grad_g]=GradJCompute(m,inputs, u_g_obs,analysis_type );1 function [u_g grad_g]=GradJCompute(m,inputs, u_g_obs,analysis_type,sub_analysis_type); 2 2 3 3 %Recover solution for this stiffness and right hand side: … … 5 5 disp(' computing velocities...') 6 6 end 7 [u_g K_ff0 K_fs0 ]=diagnostic_core_nonlinear(m,inputs,analysis_type );7 [u_g K_ff0 K_fs0 ]=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type); 8 8 9 9 %Buid Du, difference between observed velocity and model velocity. … … 11 11 disp(' computing Du...') 12 12 end 13 [Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,u_g_obs,inputs );13 [Du_g]=Du(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g,u_g_obs,inputs,analysis_type,sub_analysis_type); 14 14 15 15 %Reduce adjoint load from g-set to f-set … … 26 26 27 27 %Compute gradJ 28 grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, lambda_g,inputs );28 grad_g=Gradj(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, lambda_g,inputs,analysis_type,sub_analysis_type); -
issm/trunk/src/m/solutions/cielo/control.m
r422 r465 6 6 %Build all models requested for control simulation 7 7 md.analysis_type='control'; 8 md.sub_analysis_type=''; 8 9 m=CreateFemModel(md); 9 10 … … 40 41 41 42 disp(' computing gradJ...'); 42 [u_g c(n).grad_g]=GradJCompute(m,inputs,u_g_obs,md.analysis_type );43 [u_g c(n).grad_g]=GradJCompute(m,inputs,u_g_obs,md.analysis_type,md.sub_analysis_type); 43 44 inputs=add(inputs,'velocity',u_g,'doublevec',2,m.parameters.numberofnodes); 44 45 disp(' done.'); … … 58 59 59 60 disp(' optimizing along gradient direction...'); 60 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m,inputs,p_g,u_g_obs,c(n).grad_g,n,md.analysis_type );61 [search_scalar c(n).J]=ControlOptimization('objectivefunctionC',0,1,options,m,inputs,p_g,u_g_obs,c(n).grad_g,n,md.analysis_type,md.sub_analysis_type); 61 62 disp(' done.'); 62 63 … … 76 77 %some temporary saving 77 78 if(mod(n,5)==0), 78 solution=controlfinalsol(c,m,p_g,inputs,md.analysis_type );79 solution=controlfinalsol(c,m,p_g,inputs,md.analysis_type,md.sub_analysis_type); 79 80 save temporary_control_results solution 80 81 end … … 85 86 %Create final solution 86 87 disp(' preparing final velocity solution...'); 87 solution=controlfinalsol(c,m,p_g,inputs,md.analysis_type );88 solution=controlfinalsol(c,m,p_g,inputs,md.analysis_type,md.sub_analysis_type); 88 89 disp(' done.'); 89 90 -
issm/trunk/src/m/solutions/cielo/controlfinalsol.m
r377 r465 1 function solution=controlfinalsol(c,m,p_g,inputs,analysis_type );1 function solution=controlfinalsol(c,m,p_g,inputs,analysis_type,sub_analysis_type); 2 2 3 3 %From parameters, build inputs for icediagnostic_core, using the final parameters 4 4 inputs=add(inputs,m.parameters.control_type,p_g,'doublevec',2,m.parameters.numberofnodes); 5 u_g=diagnostic_core_nonlinear(m,inputs,analysis_type );5 u_g=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type); 6 6 7 7 %Build partitioning vectors to recover solution -
issm/trunk/src/m/solutions/cielo/diagnostic.m
r358 r465 10 10 %Build all models requested for diagnostic simulation 11 11 displaystring(md.debug,'%s',['reading diagnostic horiz model data']); 12 md.analysis_type='diagnostic _horiz'; m_dh=CreateFemModel(md);12 md.analysis_type='diagnostic'; md.sub_analysis_type='horiz'; m_dh=CreateFemModel(md); 13 13 14 14 displaystring(md.debug,'\n%s',['reading diagnostic vert model data']); 15 md.analysis_type='diagnostic _vert'; m_dv=CreateFemModel(md);15 md.analysis_type='diagnostic'; md.sub_analysis_type='vert'; m_dv=CreateFemModel(md); 16 16 17 17 displaystring(md.debug,'\n%s',['reading diagnostic stokes model data']); 18 md.analysis_type='diagnostic _stokes'; m_ds=CreateFemModel(md);18 md.analysis_type='diagnostic'; md.sub_analysis_type='stokes'; m_ds=CreateFemModel(md); 19 19 20 20 displaystring(md.debug,'\n%s',['reading diagnostic hutter model data']); 21 md.analysis_type='diagnostic _hutter'; m_dhu=CreateFemModel(md);21 md.analysis_type='diagnostic'; md.sub_analysis_type='hutter'; m_dhu=CreateFemModel(md); 22 22 23 23 displaystring(md.debug,'\n%s',['reading surface and bed slope computation model data']); 24 md.analysis_type='slope_compute'; m _sl=CreateFemModel(md);24 md.analysis_type='slope_compute'; md.sub_analysis_type=''; m_sl=CreateFemModel(md); 25 25 26 26 % figure out number of dof: just for information purposes. -
issm/trunk/src/m/solutions/cielo/diagnostic_core.m
r394 r465 16 16 17 17 displaystring(debug,'\n%s',['computing surface slope (x and y derivatives)...']); 18 slopex=diagnostic_core_linear(m_sl,inputs,'s urface_slope_compute_x');19 slopey=diagnostic_core_linear(m_sl,inputs,'s urface_slope_compute_y');18 slopex=diagnostic_core_linear(m_sl,inputs,'slope_compute','surfacex'); 19 slopey=diagnostic_core_linear(m_sl,inputs,'slope_compute','surfacey'); 20 20 21 21 if dim==3, … … 30 30 31 31 displaystring(debug,'\n%s',['computing hutter velocities...']); 32 u_g=diagnostic_core_linear(m_dhu,inputs,'diagnostic _hutter');32 u_g=diagnostic_core_linear(m_dhu,inputs,'diagnostic','hutter'); 33 33 34 34 displaystring(debug,'\n%s',['computing pressure according to MacAyeal...']); … … 46 46 47 47 displaystring(debug,'\n%s',['computing horizontal velocities...']); 48 u_g=diagnostic_core_nonlinear(m_dh,inputs,'diagnostic _horiz');48 u_g=diagnostic_core_nonlinear(m_dh,inputs,'diagnostic','horiz'); 49 49 50 50 displaystring(debug,'\n%s',['computing pressure according to MacAyeal...']); … … 59 59 displaystring(debug,'\n%s',['computing vertical velocities...']); 60 60 inputs=add(inputs,'velocity',u_g_horiz,'doublevec',m_dh.parameters.numberofdofspernode,m_dh.parameters.numberofnodes); 61 u_g_vert=diagnostic_core_linear(m_dv,inputs,'diagnostic _vert');61 u_g_vert=diagnostic_core_linear(m_dv,inputs,'diagnostic','vert'); 62 62 63 63 displaystring(debug,'\n%s',['combining horizontal and vertical velocities...']); … … 75 75 76 76 displaystring(debug,'\n%s',['computing bed slope (x and y derivatives)...']); 77 slopex=diagnostic_core_linear(m_sl,inputs,' bed_slope_compute_x');78 slopey=diagnostic_core_linear(m_sl,inputs,' bed_slope_compute_y');77 slopex=diagnostic_core_linear(m_sl,inputs,'slope_compute','bedx'); 78 slopey=diagnostic_core_linear(m_sl,inputs,'slope_compute','bedy'); 79 79 slopex=SlopeExtrude(m_sl.elements,m_sl.nodes,m_sl.loads,m_sl.materials,slopex); 80 80 slopey=SlopeExtrude(m_sl.elements,m_sl.nodes,m_sl.loads,m_sl.materials,slopey); … … 95 95 96 96 displaystring(debug,'\n%s',['computing stokes velocities and pressure ...']); 97 u_g=diagnostic_core_nonlinear(m_ds,inputs,'diagnostic _stokes');97 u_g=diagnostic_core_nonlinear(m_ds,inputs,'diagnostic','stokes'); 98 98 99 99 %"decondition" pressure -
issm/trunk/src/m/solutions/cielo/diagnostic_core_nonlinear.m
r394 r465 1 function [u_g varargout]=diagnostic_core_nonlinear(m,inputs,analysis_type )1 function [u_g varargout]=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type) 2 2 %INPUT function [ru_g varargout]=cielodiagnostic_core_nonlinear(m,inputs) 3 3 … … 30 30 31 31 %system matrices 32 [K_gg_nopenalty , p_g_nopenalty]=SystemMatrices(m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type );32 [K_gg_nopenalty , p_g_nopenalty]=SystemMatrices(m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type); 33 33 34 34 %penalties 35 [K_gg , p_g]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type );35 [K_gg , p_g]=PenaltySystemMatrices(K_gg_nopenalty,p_g_nopenalty,m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type); 36 36 37 37 … … 60 60 61 61 %penalty constraints 62 [loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints( m.elements,m.nodes, loads, m.materials,m.parameters,inputs );62 [loads,constraints_converged,num_unstable_constraints] =PenaltyConstraints( m.elements,m.nodes, loads, m.materials,m.parameters,inputs,analysis_type,sub_analysis_type); 63 63 64 64 % Figure out if convergence is reached. … … 107 107 inputs=add(inputs,'velocity',soln(count).u_g,'doublevec',m.parameters.numberofdofspernode,m.parameters.numberofnodes); 108 108 m.parameters.kflag=1; m.parameters.pflag=0; 109 [K_gg, p_g]=SystemMatrices(m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type );109 [K_gg, p_g]=SystemMatrices(m.elements,m.nodes,loads,m.materials,m.parameters,inputs,analysis_type,sub_analysis_type); 110 110 [K_ff, K_fs] = Reducematrixfromgtof( K_gg, m.Gmn, m.nodesets); 111 111 varargout(1)={K_ff}; -
issm/trunk/src/m/solutions/cielo/objectivefunctionC.m
r377 r465 1 function J =objectivefunctionC(search_scalar,m,inputs,p_g,u_g_obs,grad_g,n,analysis_type );1 function J =objectivefunctionC(search_scalar,m,inputs,p_g,u_g_obs,grad_g,n,analysis_type,sub_analysis_type); 2 2 3 3 %recover some parameters … … 13 13 14 14 %Run diagnostic with updated parameters. 15 u_g=diagnostic_core_nonlinear(m,inputs,analysis_type );15 u_g=diagnostic_core_nonlinear(m,inputs,analysis_type,sub_analysis_type); 16 16 17 17 %Compute misfit for this velocity field. 18 J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, u_g_obs,inputs );18 J=Misfit(m.elements,m.nodes,m.loads,m.materials,m.parameters, u_g, u_g_obs,inputs,analysis_type,sub_analysis_type); -
issm/trunk/src/m/solutions/cielo/thermal.m
r163 r465 7 7 %timing 8 8 t1=clock; 9 10 %md.analysis_type is set to thermalsteady or thermaltransient. save it.11 solutiontype=md.analysis_type;12 9 13 %Build all models requested for thermal and melting simulation 14 md.analysis_type=solutiontype; m_t=CreateFemModel(md); 15 md.analysis_type='melting' m_m=CreateFEMModel(md); 10 %Build all models requested for diagnostic simulation 11 displaystring(md.debug,'%s',['reading thermal model data']); 12 md.analysis_type='thermal'; m_t=CreateFemModel(md); 13 14 displaystring(md.debug,'%s',['reading melting model data']); 15 md.analysis_type='melting'; m_m=CreateFemModel(md); 16 16 17 17 % figure out number of dof: just for information purposes. 18 md.dof=m_t.nodesets.fsize; %biggest dof number18 md.dof=m_t.nodesets.fsize; 19 19 20 21 if strcmpi(solutiontype,'thermalsteady'), 22 23 %initialize velocity and pressure 24 u_g=m_t.parameters.u_g; 25 p_g=m_t.parameters.p_g; 26 27 inputs=struct('pressure',p_g,'velocity',u_g); 28 29 disp(sprintf('\n%s\n','computing temperature...')); 30 [t_g,m_t]=thermal_core(m_t,inputs); 31 32 disp(sprintf('\n%s\n','computing melting...')); 33 inputs=struct('pressure',p_g,'temperature',t_g); 20 %initialize inputs 21 displaystring(debug,'\n%s',['setup inputs...']); 22 inputs=inputlist; 23 inputs=add(inputs,'velocity',m_t.parameters.u_g,'doublevec',3,m_t.parameters.numberofnodes); 24 inputs=add(inputs,'pressure',m_t.parameters.p_g,'doublevec',1,m_t.parameters.numberofnodes); 25 inputs=add(inputs,'dt',m_t.parameters.dt,'double'); 26 27 if strcmpi(md.sub_analysis_type,'steady'), 28 29 displaystring(debug,'\n%s',['computing temperatures...']); 30 [t_g loads_t melting_offset]=thermal_core(m_t,inputs,'thermal','steady'); 34 31 35 melting_g=melting_core(m_m,inputs); 36 37 %load results onto model 32 displaystring(debug,'\n%s',['computing melting...']); 33 inputs=add(inputs,'melting_offset',melting_offset,'double'); 34 melting_g=melting_core(m_m,inputs,'melting','steady'); 35 36 displaystring(debug,'\n%s',['load results...']); 38 37 md.temperature=t_g; 39 38 md.melting=melting_g*md.yts; %from m/s to m/a … … 41 40 else 42 41 43 %initialize velocity, pressure and temperature44 u_g=m .parameters.u_g;45 p_g=m .parameters.p_g;46 t_g=m .parameters.t_g;47 melting_g=m .parameters.melting_g;42 %initialize velocity, pressure, temperature and melting 43 u_g=m_t.parameters.u_g; 44 p_g=m_t.parameters.p_g; 45 t_g=m_t.parameters.t_g; 46 melting_g=m_t.parameters.melting_g; 48 47 49 48 nsteps=m_t.parameters.ndt/m_t.parameters.dt; … … 55 54 for n=1:nsteps, 56 55 57 disp (sprintf('\n%s%i/%i\n','time step: ',n,md.ndt/md.dt));58 disp(' computing temperature...');59 60 inputs= struct('pressure',p_g,'temperature',soln(n).t_g,'velocity',u_g,'dt',m_t.parameters.dt);61 [soln(n+1).t_g ,m_t]=thermal_core(m_t,inputs);56 displaystring(debug,'\n%s%i/%i\n','time step: ',n,nsteps); 57 58 displaystring(debug,'\n%s',[' computing temperatures...']); 59 inputs=add(inputs,'temperature',soln(n).t_g,'doublevec',1,m_t.parameters.numberofnodes); 60 [soln(n+1).t_g loads_t melting_offset]=thermal_core(m_t,inputs); 62 61 63 62 disp(' computing melting...'); … … 80 79 md.melting=solution_melting; 81 80 end 82 81 82 %stop timing 83 t2=clock; 84 displaystring(md.debug,'\n%s\n',['solution converged in ' num2str(etime(t2,t1)) ' seconds']); -
issm/trunk/src/mex/ControlOptimization/ControlOptimization.cpp
r377 r465 51 51 optargs.n=STEP; 52 52 optargs.analysis_type=ANALYSIS; 53 optargs.sub_analysis_type=SUBANALYSIS; 53 54 54 55 optpars.xmin=xmin; … … 73 74 { 74 75 _printf_("\n"); 75 _printf_(" usage: [search_scalar J] = %s(function_name,xmin,xmax,options,m,inputs,p_g,u_g_obs,grad_g,step,analysis_type )\n",__FUNCT__);76 _printf_(" usage: [search_scalar J] = %s(function_name,xmin,xmax,options,m,inputs,p_g,u_g_obs,grad_g,step,analysis_type,sub_analysis_type)\n",__FUNCT__); 76 77 _printf_("\n"); 77 78 } -
issm/trunk/src/mex/ControlOptimization/ControlOptimization.h
r377 r465 28 28 #define STEP (mxArray*)prhs[9] 29 29 #define ANALYSIS (mxArray*)prhs[10] 30 #define SUBANALYSIS (mxArray*)prhs[11] 30 31 31 32 /* serial output macros: */ … … 37 38 #define NLHS 2 38 39 #undef NRHS 39 #define NRHS 1 140 #define NRHS 12 40 41 41 42 -
issm/trunk/src/mex/Du/Du.cpp
r246 r465 15 15 DataSet* loads=NULL; 16 16 DataSet* materials=NULL; 17 int analysis_type;18 17 double* u_g=NULL; 19 18 double* u_g_obs=NULL; 20 19 ParameterInputs* inputs=NULL; 20 char* analysis_type_string=NULL; 21 int analysis_type; 22 char* sub_analysis_type_string=NULL; 23 int sub_analysis_type; 21 24 22 25 /* output datasets: */ … … 35 38 FetchData((void**)&loads,NULL,NULL,LOADS,"DataSet",NULL); 36 39 FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL); 37 FetchData((void**)&analysis_type,NULL,NULL,mxGetField(PARAMETERS,0,"analysis_type"),"Integer",NULL);38 40 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec"); 39 41 FetchData((void**)&u_g_obs,NULL,NULL,UGOBS,"Vector","Vec"); 42 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 43 analysis_type=AnalysisTypeAsEnum(analysis_type_string); 44 FetchData((void**)&sub_analysis_type_string,NULL,NULL,SUBANALYSIS,"String",NULL); 45 sub_analysis_type=AnalysisTypeAsEnum(sub_analysis_type_string); 40 46 41 47 /*Fetch inputs: */ … … 44 50 45 51 /*!Call core code: */ 46 Dux(&du_g, elements,nodes,loads,materials,u_g,u_g_obs,inputs,analysis_type );52 Dux(&du_g, elements,nodes,loads,materials,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type); 47 53 48 54 /*write output : */ … … 58 64 VecFree(&du_g); 59 65 delete inputs; 66 xfree((void**)&analysis_type_string); 67 xfree((void**)&sub_analysis_type_string); 60 68 61 69 /*end module: */ -
issm/trunk/src/mex/Du/Du.h
r1 r465 25 25 #define UGOBS (mxArray*)prhs[6] 26 26 #define INPUTS (mxArray*)prhs[7] 27 #define ANALYSIS (mxArray*)prhs[8] 28 #define SUBANALYSIS (mxArray*)prhs[9] 27 29 28 30 /* serial output macros: */ … … 33 35 #define NLHS 1 34 36 #undef NRHS 35 #define NRHS 837 #define NRHS 10 36 38 37 39 -
issm/trunk/src/mex/Gradj/Gradj.cpp
r246 r465 15 15 DataSet* loads=NULL; 16 16 DataSet* materials=NULL; 17 int analysis_type;18 17 char* control_type=NULL; 19 18 double* u_g=NULL; 20 19 double* lambda_g=NULL; 21 20 ParameterInputs* inputs=NULL; 21 char* analysis_type_string=NULL; 22 int analysis_type; 23 char* sub_analysis_type_string=NULL; 24 int sub_analysis_type; 22 25 23 26 /* output datasets: */ … … 36 39 FetchData((void**)&loads,NULL,NULL,LOADS,"DataSet",NULL); 37 40 FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL); 38 FetchData((void**)&analysis_type,NULL,NULL,mxGetField(PARAMETERS,0,"analysis_type"),"Integer",NULL);39 41 FetchData((void**)&control_type,NULL,NULL,mxGetField(PARAMETERS,0,"control_type"),"String",NULL); 40 42 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec"); 41 43 FetchData((void**)&lambda_g,NULL,NULL,LAMBDAG,"Vector","Vec"); 44 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 45 analysis_type=AnalysisTypeAsEnum(analysis_type_string); 46 FetchData((void**)&sub_analysis_type_string,NULL,NULL,SUBANALYSIS,"String",NULL); 47 sub_analysis_type=AnalysisTypeAsEnum(sub_analysis_type_string); 42 48 43 49 /*Fetch inputs: */ … … 46 52 47 53 /*!Call core code: */ 48 Gradjx(&grad_g, elements,nodes,loads,materials,u_g,lambda_g,inputs,analysis_type, control_type);54 Gradjx(&grad_g, elements,nodes,loads,materials,u_g,lambda_g,inputs,analysis_type,sub_analysis_type,control_type); 49 55 50 56 /*write output : */ … … 61 67 delete inputs; 62 68 VecFree(&grad_g); 69 xfree((void**)&analysis_type_string); 70 xfree((void**)&sub_analysis_type_string); 63 71 64 72 /*end module: */ -
issm/trunk/src/mex/Gradj/Gradj.h
r1 r465 25 25 #define LAMBDAG (mxArray*)prhs[6] 26 26 #define INPUTS (mxArray*)prhs[7] 27 #define ANALYSIS (mxArray*)prhs[8] 28 #define SUBANALYSIS (mxArray*)prhs[9] 27 29 28 30 /* serial output macros: */ … … 33 35 #define NLHS 1 34 36 #undef NRHS 35 #define NRHS 837 #define NRHS 10 36 38 37 39 -
issm/trunk/src/mex/Misfit/Misfit.cpp
r246 r465 15 15 DataSet* loads=NULL; 16 16 DataSet* materials=NULL; 17 int analysis_type;18 17 double* u_g=NULL; 19 18 double* u_g_obs=NULL; 20 19 ParameterInputs* inputs=NULL; 20 char* analysis_type_string=NULL; 21 int analysis_type; 22 char* sub_analysis_type_string=NULL; 23 int sub_analysis_type; 21 24 22 25 /* output datasets: */ … … 34 37 FetchData((void**)&loads,NULL,NULL,LOADS,"DataSet",NULL); 35 38 FetchData((void**)&materials,NULL,NULL,MATERIALS,"DataSet",NULL); 36 FetchData((void**)&analysis_type,NULL,NULL,mxGetField(PARAMETERS,0,"analysis_type"),"Integer",NULL);37 39 FetchData((void**)&u_g,NULL,NULL,UG,"Vector","Vec"); 38 40 FetchData((void**)&u_g_obs,NULL,NULL,UGOBS,"Vector","Vec"); 41 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 42 analysis_type=AnalysisTypeAsEnum(analysis_type_string); 43 FetchData((void**)&sub_analysis_type_string,NULL,NULL,SUBANALYSIS,"String",NULL); 44 sub_analysis_type=AnalysisTypeAsEnum(sub_analysis_type_string); 39 45 40 46 /*Fetch inputs: */ … … 43 49 44 50 /*!Call core code: */ 45 Misfitx(&J, elements,nodes,loads,materials,u_g,u_g_obs,inputs,analysis_type );51 Misfitx(&J, elements,nodes,loads,materials,u_g,u_g_obs,inputs,analysis_type,sub_analysis_type); 46 52 47 53 /*write output : */ … … 55 61 xfree((void**)&u_g); 56 62 xfree((void**)&u_g_obs); 57 delete inputs 63 delete inputs; 64 xfree((void**)&analysis_type_string); 65 xfree((void**)&sub_analysis_type_string); 58 66 59 67 /*end module: */ -
issm/trunk/src/mex/Misfit/Misfit.h
r1 r465 25 25 #define UGOBS (mxArray*)prhs[6] 26 26 #define INPUTS (mxArray*)prhs[7] 27 #define ANALYSIS (mxArray*)prhs[8] 28 #define SUBANALYSIS (mxArray*)prhs[9] 27 29 28 30 /* serial output macros: */ … … 33 35 #define NLHS 1 34 36 #undef NRHS 35 #define NRHS 837 #define NRHS 10 36 38 37 39 -
issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp
r394 r465 32 32 33 33 /*Create elements, nodes and materials: */ 34 CreateElementsNodesAndMaterials(&elements,&nodes,&materials,model,MODEL); 35 36 /*Create constraints: */ 37 CreateConstraints(&constraints,model,MODEL); 38 39 /*Create loads: */ 40 CreateLoads(&loads,model,MODEL); 41 /*Create parameters: */ 42 CreateParameters(¶meters,model,MODEL); 34 CreateDataSets(&elements,&nodes,&materials,&constraints, &loads, ¶meters, model,MODEL); 43 35 44 36 /*Write output data: */ -
issm/trunk/src/mex/PenaltyConstraints/PenaltyConstraints.cpp
r246 r465 16 16 DataSet* materials=NULL; 17 17 ParameterInputs* inputs=NULL; 18 char* analysis_type_string=NULL; 18 19 int analysis_type; 20 char* sub_analysis_type_string=NULL; 21 int sub_analysis_type; 19 22 20 23 /*output: */ … … 35 38 36 39 /*parameters: */ 37 FetchData((void**)&analysis_type,NULL,NULL,mxGetField(PARAMETERS,0,"analysis_type"),"Integer",NULL); 40 FetchData((void**)&analysis_type_string,NULL,NULL,ANALYSIS,"String",NULL); 41 analysis_type=AnalysisTypeAsEnum(analysis_type_string); 42 43 FetchData((void**)&sub_analysis_type_string,NULL,NULL,SUBANALYSIS,"String",NULL); 44 sub_analysis_type=AnalysisTypeAsEnum(sub_analysis_type_string); 38 45 39 46 /*Fetch inputs: */ … … 42 49 43 50 /*!Generate internal degree of freedom numbers: */ 44 PenaltyConstraintsx(&converged, &num_unstable_constraints, elements,nodes,loads,materials,inputs,analysis_type );51 PenaltyConstraintsx(&converged, &num_unstable_constraints, elements,nodes,loads,materials,inputs,analysis_type,sub_analysis_type); 45 52 46 53 /*write output datasets: */ … … 56 63 delete materials; 57 64 delete inputs; 65 xfree((void**)&analysis_type_string); 66 xfree((void**)&sub_analysis_type_string); 58 67 59 68 /*end module: */ -
issm/trunk/src/mex/PenaltyConstraints/PenaltyConstraints.h
r1 r465 23 23 #define PARAMETERS (mxArray*)prhs[4] 24 24 #define INPUTS (mxArray*)prhs[5] 25 #define ANALYSIS (mxArray*)prhs[6] 26 #define SUBANALYSIS (mxArray*)prhs[7] 25 27 26 28 /* serial output macros: */ … … 33 35 #define NLHS 3 34 36 #undef NRHS 35 #define NRHS 637 #define NRHS 8 36 38 37 39 #endif /* _PENALTYCONSTRAINTS_H */ -
issm/trunk/src/mex/PenaltySystemMatrices/PenaltySystemMatrices.cpp
r364 r465 21 21 int analysis_type; 22 22 char* analysis_type_string=NULL; 23 int sub_analysis_type; 24 char* sub_analysis_type_string=NULL; 23 25 24 26 /*Boot module: */ … … 42 44 analysis_type=AnalysisTypeAsEnum(analysis_type_string); 43 45 46 FetchData((void**)&sub_analysis_type_string,NULL,NULL,SUBANALYSIS,"String",NULL); 47 sub_analysis_type=AnalysisTypeAsEnum(sub_analysis_type_string); 48 44 49 45 50 /*Fetch inputs: */ … … 48 53 49 54 /*!Generate stiffnesses from penalties: */ 50 PenaltySystemMatricesx(Kgg, pg,elements,nodes,loads,materials,kflag,pflag,inputs,analysis_type );55 PenaltySystemMatricesx(Kgg, pg,elements,nodes,loads,materials,kflag,pflag,inputs,analysis_type,sub_analysis_type); 51 56 52 57 /*write output datasets: */ … … 63 68 VecFree(&pg); 64 69 xfree((void**)&analysis_type_string); 70 xfree((void**)&sub_analysis_type_string); 65 71 66 72 /*end module: */ -
issm/trunk/src/mex/PenaltySystemMatrices/PenaltySystemMatrices.h
r364 r465 26 26 #define INPUTS (mxArray*)prhs[7] 27 27 #define ANALYSIS (mxArray*)prhs[8] 28 #define SUBANALYSIS (mxArray*)prhs[9] 28 29 29 30 /* serial output macros: */ … … 35 36 #define NLHS 2 36 37 #undef NRHS 37 #define NRHS 938 #define NRHS 10 38 39 39 40 -
issm/trunk/src/mex/SystemMatrices/SystemMatrices.cpp
r371 r465 21 21 char* analysis_type_string=NULL; 22 22 int analysis_type; 23 char* sub_analysis_type_string=NULL; 24 int sub_analysis_type; 23 25 24 26 /* output datasets: */ … … 46 48 analysis_type=AnalysisTypeAsEnum(analysis_type_string); 47 49 50 FetchData((void**)&sub_analysis_type_string,NULL,NULL,SUBANALYSIS,"String",NULL); 51 sub_analysis_type=AnalysisTypeAsEnum(sub_analysis_type_string); 52 48 53 /*Fetch inputs: */ 49 54 inputs=new ParameterInputs; … … 51 56 52 57 /*!Generate internal degree of freedom numbers: */ 53 SystemMatricesx(&Kgg, &pg,elements,nodes,loads,materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type );58 SystemMatricesx(&Kgg, &pg,elements,nodes,loads,materials,kflag,pflag,connectivity,numberofdofspernode,inputs,analysis_type,sub_analysis_type); 54 59 55 60 /*write output datasets: */ … … 60 65 /*Free ressources: */ 61 66 xfree((void**)&analysis_type_string); 67 xfree((void**)&sub_analysis_type_string); 62 68 delete elements; 63 69 delete nodes; -
issm/trunk/src/mex/SystemMatrices/SystemMatrices.h
r364 r465 24 24 #define INPUTS (mxArray*)prhs[5] 25 25 #define ANALYSIS (mxArray*)prhs[6] 26 #define SUBANALYSIS (mxArray*)prhs[7] 26 27 27 28 /* serial output macros: */ … … 33 34 #define NLHS 2 34 35 #undef NRHS 35 #define NRHS 736 #define NRHS 8 36 37 37 38
Note:
See TracChangeset
for help on using the changeset viewer.