Changeset 19791 for issm/trunk-jpl/src/m/classes/autodiff.js
- Timestamp:
- 11/23/15 10:31:37 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/autodiff.js
r19787 r19791 31 31 32 32 }// }}} 33 this.classname= function(){// {{{ 34 return "autodiff"; 35 }// }}} 33 36 this.checkconsistency = function(md,solution,analyses){ //{{{ 34 37 … … 57 60 } 58 61 } // }}} 62 this.marshall=function(md,fid) { //{{{ 63 64 WriteData(fid,'object',this,'fieldname','isautodiff','format','Boolean'); 65 WriteData(fid,'object',this,'fieldname','driver','format','String'); 66 67 //early return 68 if (!this.isautodiff){ 69 WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean'); 70 WriteData(fid,'data',false,'enum',AutodiffKeepEnum(),'format','Boolean'); 71 return; 72 } 73 74 //buffer sizes {{{ 75 WriteData(fid,'object',this,'fieldname','obufsize','format','Double'); 76 WriteData(fid,'object',this,'fieldname','lbufsize','format','Double'); 77 WriteData(fid,'object',this,'fieldname','cbufsize','format','Double'); 78 WriteData(fid,'object',this,'fieldname','tbufsize','format','Double'); 79 WriteData(fid,'object',this,'fieldname','gcTriggerRatio','format','Double'); 80 WriteData(fid,'object',this,'fieldname','gcTriggerMaxSize','format','Double'); 81 //}}} 82 //process dependent variables {{{ 83 num_dependent_objects=this.dependents.length; 84 WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer'); 85 86 if(num_dependent_objects){ 87 var names=[]; 88 types=NewArrayFill(num_dependent_objects,0); 89 indices=NewArrayFill(num_dependent_objects,0); 90 91 for (var i=0;i<num_dependent_objects;i++){ 92 dep=this.dependents[i]; 93 94 names.push(dep.name); 95 types[i]=dep.typetoscalar(); 96 indices[i]=dep.index; 97 } 98 WriteData(fid,'data',names,'enum',AutodiffDependentObjectNamesEnum(),'format','StringArray'); 99 WriteData(fid,'data',types,'enum',AutodiffDependentObjectTypesEnum(),'format','IntMat','mattype',3); 100 WriteData(fid,'data',indices,'enum',AutodiffDependentObjectIndicesEnum(),'format','IntMat','mattype',3); 101 } 102 //}}} 103 //process independent variables {{{ 104 num_independent_objects=this.independents.length; 105 WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer'); 106 107 if(num_independent_objects){ 108 names=NewArrayFill(num_independent_objects,0); 109 types=NewArrayFill(num_independent_objects,0); 110 111 for (var i=0;i<num_independent_objects;i++){ 112 indep=this.independents[i]; 113 114 names[i]=StringToEnum(indep.name); 115 types[i]=indep.typetoscalar(); 116 } 117 WriteData(fid,'data',names,'enum',AutodiffIndependentObjectNamesEnum(),'format','IntMat','mattype',3); 118 WriteData(fid,'data',types,'enum',AutodiffIndependentObjectTypesEnum(),'format','IntMat','mattype',3); 119 } 120 //}}} 121 //if driver is fos_forward, build index: {{{ 122 if (this.driver == 'fos_forward'){ 123 var index=0; 124 125 for (var i=0;i<num_independent_objects;i++){ 126 indep=this.independents[i]; 127 if (!(isNaN(indep.fos_forward_index))){ 128 index=index+indep.fos_forward_index; 129 break; 130 } 131 else{ 132 if (indep.type=='scalar') index=index+1; 133 else index=index+indep.nods; 134 } 135 } 136 index=index-1; //get c-index numbering going 137 WriteData(fid,'data',index,'enum',AutodiffFosForwardIndexEnum(),'format','Integer'); 138 } 139 //}}} 140 //if driver is fos_reverse, build index: {{{ 141 if (this.driver == 'fos_reverse'){ 142 var index=0; 143 144 for (var i=0;i<num_dependent_objects;i++){ 145 dep=this.dependents[i]; 146 if (!(isNaN(dep.fos_reverse_index))){ 147 index=index+dep.fos_reverse_index; 148 break; 149 } 150 else{ 151 if (dep.type =='scalar') index=index+1; 152 else index=index+dep.nods; 153 } 154 } 155 index=index-1; //get c-index numbering going 156 WriteData(fid,'data',index,'enum',AutodiffFosReverseIndexEnum(),'format','Integer'); 157 } 158 //}}} 159 //if driver is fov_forward, build indices: {{{ 160 if (this.driver == 'fov_forward'){ 161 var indices=0; 162 163 for (var i=0;i<num_independent_objects;i++){ 164 indep=this.independents[i]; 165 if (!indep.fos_forward_index.length){ 166 indices=indices+indep.fov_forward_indices; 167 break; 168 } 169 else{ 170 if (indep.type =='scalar') indices=indices+1; 171 else indices=indices+indep.nods; 172 } 173 } 174 indices=indices-1; //get c-indices numbering going 175 WriteData(fid,'data',indices,'enum',AutodiffFovForwardIndicesEnum(),'format','IntMat','mattype',3); 176 } 177 //}}} 178 //deal with mass fluxes: {{{ 179 mass_flux_segments=[]; 180 for (var i=0;i<num_dependent_objects;i++){ 181 dep=this.dependents[i]; 182 if (dep.name =='MassFlux'){ 183 mass_flux_segments.push(dep.segments); 184 } 185 } 186 if (mass_flux_segments.length){ 187 WriteData(fid,'data',mass_flux_segments,'enum',MassFluxSegmentsEnum(),'format','MatArray'); 188 flag=true; 189 } 190 else flag=false; 191 WriteData(fid,'data',flag,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean'); 192 //}}} 193 //deal with trace keep on: {{{ 194 keep=false; 195 196 //From ADOLC userdoc: 197 // The optional integer argument keep of trace on determines whether the numerical values of all active variables are 198 // recorded in a buffered temporary array or file called the taylor stack. This option takes effect if keep = 1 and 199 // prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse 200 // mode as described in the Section 4 and Section 5. 201 // 202 203 if (this.driver.length<=3) keep=false; //there is no "_reverse" string within the driver string: 204 else{ 205 if (this.driver.splice(4) == '_reverse') keep=true; 206 else keep=false; 207 } 208 WriteData(fid,'data',keep,'enum',AutodiffKeepEnum(),'format','Boolean'); 209 //}}} 210 }//}}} 59 211 //properties 60 212 // {{{
Note:
See TracChangeset
for help on using the changeset viewer.