* TOPOPTIM PROCEDUR FD218221 25/12/18 21:15:12 12429 ************************************************************************ ** Topology optimization procedure. ** ** Author: ** Guenhael Le Quilliec (LaMe - Polytech Tours) ** ** Version: ** 4.0 2025/12/05 Various updates and improvements of the structure, ** performance, and capabilities: ** - Method of Moving Asymptotes optimizer; ** - Volume minimization objective; ** - Von Mises stress aggregated constraint; ** - KLl, KSu, P-norm, and P-mean aggregation ** functions; ** - Compatible with penalized density-dependent ** loading; ** - Density filtering, constraint sensitivity ** filtering; ** - Binarization by projection using sigmoid ** functions; ** - RAMP penalty function. ** In addition, some new examples illustrate the use of ** these features. ** 3.0 2021/04/15 Improved the structure of TOPOPTIM for developers and ** added a new filtering function. ** 2.4 2021/04/14 Fixed an issue with TET4 in frozen area ** 2.3 2021/03/19 Modified default value of 'OC_L2' ** 2.2 2018/02/09 Made compatible with the new version of TOPOSAUV, ** allowing early stop and restart of the optimization ** 2.1 2017/11/11 Compliant mechanism output displacement maximization ** 2.0 2017/04/18 Geometric restrictions, non-linear, multiobjective, ** multiphysics, customizable topology optimization ** 1.1 2015/11/02 Check if volume fraction > proportion of frozen area ** 1.0 2014/04/28 Linear mono-objective topology optimization ************************************************************************ * * Global structure * ---------------- * * Start ─── → ─── TOPOPTIM * ├─ TOPOBOOT * │ ├─ TOPOEVOL * ↓ ├─ TOPORSTR * │ └─ TOPOPHYS * │ └─ TOPOPROJ * ├─ (TOPOPERS) * ┌ → ┼─ TOPOEVOL * │ ├─ TOPOPENA * │ ├─ TOPOACTI * │ │ └─ TOPOMATE * │ O ├─ (TOPOUPDT) * │ p ├─ TOPOCHAR * │ t ├─ TOPOINFO Other procedures * │ i ├─ TOPORESO called by TOPOPTIM * │ m ├─ TOPOOBJE * │ i │ ├─ TOPOCMPL ↔ TOPOFILT * │ z │ ├─ TOPORSTR ↔ TOPOCHAN * │ a │ └─ TOPODYDX ↔ TOPOFONC * │ t ├─ TOPOCONT ↔ TOPOMODI * ↑ i ↓ ├─ TOPOAGRE * │ o │ ├─ TOPODVSA * │ n │ ├─ TOPOADJO * │ │ │ └─ TOPOMATE * │ │ └─ TOPODYDX * │ ├─ TOPOLOGY * │ l │ └─ TOPOPHYS * │ o │ └─ TOPOPROJ * │ o ├─ TOPOCONV * │ p ├─ TOPOSAUV * │ ├─ (TOPOPERS) * │ ├─ TOPOVISU * │ │ └─ TOPOTEMP * └ ← ┤ * └─── → ─── End if convergence * or last cycle * * General naming convention * ------------------------- * * A → active zone N → normalized * B → base zone, union of D and F O → objective * C → constraint term of adjoint R → restart * method S → intermediate (smoothed / * d → derivative filtered) densities * D → design zone T → thermal * F → frozen zone or forces U → displacement * g → local constraints V → volume or volume fraction or * G → global constraint von Mises matrix * H → hat or Helmholtz filter W → working * I → intersection zone of D and A X → design variables * K → rigidity matrix Y → physical densities * L → logical Z → penalized physical densities * M → mechanical * * agg → aggregated min → minimal * bdc → boundary conditions mma → Method of Moving * bta → β Asymptotes * cas → case mod → model * cnt → contact msh → mesh * col → color msk → mask * cpl → compliance nam → name * cpn → component(s) nbr → number * crt → criterion old → old * ctr → centroid(s) out → output * cyc → cycle pos → position * dif → difference ptr → pointer * dst → density res → resolution * ene → energy rst → restriction * eps → ε sav → save * eql → equal sig → σ * eta → η spr → spring * evo → evolution stp → step * fld → field tab → table * grd → gradient tim → time * gsf → grey scale factor tmp → temporary variable * inp → input tot → total * itr → iteration typ → type * lam → λ uni → unitary * ldg → loading(s) upd → update * lim → limit val → value * lst → list var → variable * mat → material vnm → Von Mises * max → maximal wgt → weight * mcn → mechanism zon → zone * mic → microscopic * ********************************************************************** * Preprocessing * ************* TOPOBOOT tab ; * Work & logical tables * ********************* Wtab = tab.'WTABLE' ; Ltab = Wtab.'LOGIQUE' ; SI (Wtab.'CYCLE' EGA 1) ; MESS '| |' ; MESS '| |' ; MESS '| D E B U T D E L A P R O C E D U R E |' ; MESS '| |' ; MESS '| ______ ______ ______ ______ ______ ______ __ __ __ |' ; MESS '| \ \_\ \ \_____\\ \_\ \ \_____\\ \_\ \ \_\ \ \_\\ \_\ \ \_\ |' ; MESS '| _______________________________________________________________ |' ; MESS '| |' ; MESS '| |' ; FINS ; * First call to user-defined procedure * ************************************ SI tab.'PROCEDURE_TOPOPERS' ; TOPOPERS tab ; FINS ; ********************************************************************** * OPTIMIZATION LOOP * ********************************************************************** REPE itr (ENTI 1e9) ; * Save the iteration number and start iteration timer * *************************************************** Wtab.'ITERATION' = &itr ; * Update values from corresponding evolutions * ******************************************* TOPOEVOL tab ; * Update penalized physical density fields * **************************************** TOPOPENA tab ; * Update mesh, model, material, and contact of active zone * ******************************************************** TOPOACTI tab ; * User-defined procedure to update physical density-dependent data * **************************************************************** SI tab.'PROCEDURE_TOPOUPDT' ; TOPOUPDT tab ; FINS ; * Initialize or update loading * **************************** TOPOCHAR tab ; * General information before first resolution * ******************************************* TOPOINFO tab ; * Solve FE problem(s) * ******************* TOPORESO tab ; * Update the objective and its sensitivity * **************************************** TOPOOBJE tab ; * Update the constraints and their sensitivities * ********************************************** TOPOCONT tab ; * Update topology * *************** TOPOLOGY tab ; * Convergence test * **************** TOPOCONV tab ; * Save output data * **************** TOPOSAUV tab ; * User-defined procedure * ********************** SI tab.'PROCEDURE_TOPOPERS' ; TOPOPERS tab ; FINS ; * Display some results * ******************** TOPOVISU tab ; * End of cycle * ************ tab.'CYCLE' = Wtab.'CYCLE' ; Wtab.'CYCLE' = Wtab.'CYCLE' + 1 ; SI Ltab.'STOP' ; QUIT itr ; FINS ; FIN itr ; ********************************************************************** * END OPTIMIZATION LOOP * ********************************************************************** * Some cleaning * ************* OTER tab 'WTABLE' ; MENA 'OBLI' ; FINP ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales